2009-06-15 29 views
3

Le XAML suivant produit une fenêtre avec un comportement étrange autour de la zone de texte:WPF zone de texte et bordures - comportement Redimensionnement curieux

<Window x:Class="WpfSandbox.CuriousExample" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="CuriousExample" Height="300" Width="300"> 
    <DockPanel Margin="15"> 
     <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox> 
    </DockPanel> 
</Window> 

Que se passe, au moins pendant mes tests limités, est que la zone de texte rend avec une bordure d'encart motif (haut/gauche est noir, droit/bas est gris). Cependant, lorsque vous redimensionnez à n'importe quelle position à l'exception de l'original, toute la bordure de zone de texte passe au noir. Chaque fois que vous renvoyez la fenêtre au nombre exact de pixels à l'écran que le formulaire avait lors du premier chargement, il est à nouveau inséré.

Je devine que c'est PIXEL pas que je peux claquer facilement corriger le problème avec ce code:

<Window x:Class="WpfSandbox.CuriousExample" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="CuriousExample" Height="300" Width="300"> 
    <DockPanel Margin="15"> 
     <Border BorderThickness="1" BorderBrush="#FF000000"> 
      <TextBox BorderThickness="0" ></TextBox> 
     </Border> 
    </DockPanel> 
</Window> 

Quelqu'un veut risquer une explication quant à ce que je vois? Ou est-ce tout dans ma tête?

Comme je l'ai dit, la solution de contournement ci-dessus peut résoudre ce problème - juste essayer de comprendre ce qui se passe ici.

Merci,

-SCOTT

+0

Quel système d'exploitation utilisez-vous? Je vois toutes les frontières noires avec votre premier extrait XAML dès le début sur XP SP3. – micahtan

+0

Jusqu'à présent, j'ai reproduit sur le serveur 2008 et 2003 contre la version 3.5 et la version 4.0. Je vais essayer contre Vista ce soir. – sparker

Répondre

0

Vous pouvez forcer l'application à utiliser le thème de vista (aéro)

Ouvrez votre app.xaml et mettre quelque chose comme:

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/PresentationFramework.Aero;V3.0.0.0;31bf3856ad364e35;component/themes/aero.normalcolor.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

N'oubliez pas de mettre la référence PresentationFramework.Aero dans votre projet.

Avec cela, vous allez vous voir une application sous XP comme dans Vista.

0

Hmm ... vous êtes confrontés à un problème de mise au point? J'ai chargé le thème Aero, et je vois votre encart TextBox lorsque le TextBox a le focus ou est mis en souris. Vous pouvez voir ce assez clairement lorsque vous ajoutez une seconde zone de texte comme ceci:

<DockPanel Margin="15"> 
    <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox> 
    <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox> 
</DockPanel> 

La valeur par défaut de style Aero utilise un ControlTemplate qui fixe la frontière de la zone de texte à utiliser l'ListBoxChrome qui semble définir certaines propriétés supplémentaires lorsque le contrôle a Focus ou est mis en souris. Alternativement, le style par défaut pour le thème Luna lie le BorderBrush BorderBrush directement au TemplateBinding, ce qui signifie que cela est toujours respecté (et pourquoi il fonctionne dans XP/Luna et non en 2008 ou Vista).

+0

Si j'applique le thème Aero comme ci-dessus, alors le comportement que vous décrivez est mort. Cependant, sans ce thème, je vois le problème décrit à l'origine. – sparker

Questions connexes