2009-06-15 4 views
3

Das folgende XAML erzeugt ein Fenster mit seltsamen Verhalten rund um die Textbox:WPF Textbox & Borders - neugierig Redimensionierung Verhalten

<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> 

Was zumindest während meiner begrenzten Tests passiert, ist, dass die Textbox mit eingelassenem Grenze macht Muster (oben/links ist schwarz, rechts/unten ist grau). Wenn Sie jedoch die Größe auf eine beliebige Position außer dem Original ändern, wird der gesamte Rahmen des Textrahmens schwarz. Immer wenn Sie das Fenster auf die genaue Anzahl der Pixel auf dem Bildschirm zurücksetzen, die das Formular beim ersten Laden hatte, wird es erneut eingefügt.

Ich vermute, es ist nicht Pixel schnappen, wie ich das Problem leicht mit diesem Code korrigieren:

<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> 

irgendwen eine Erklärung, zu wagen, was ich sehe? Oder ist alles in meinem Kopf?

Wie bereits erwähnt, kann die obige Problemumgehung dieses Problem lösen - versuchen Sie einfach zu verstehen, was hier passiert.

Danke,

-Scott

+0

Welches Betriebssystem verwenden Sie? Ich sehe von Anfang an alle schwarzen Rahmen mit deinem ersten XAML-Code auf XP SP3. – micahtan

+0

Bisher habe ich auf Server 2008 und 2003 sowohl gegen 3.5 als auch die 4.0 Beta reproduziert. Ich werde heute Abend gegen Vista versuchen. – sparker

Antwort

0

Sie die Anwendung zwingen können, das Vista Thema (aero)

öffnen Sie Ihre app.xaml und wie etwas in Gebrauch genommen:

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

Vergessen Sie nicht, den PresentationFramework.Aero-Verweis in Ihr Projekt einzufügen.

Mit diesem werden Sie Ihre Anwendung in XP wie in Vista sehen.

0

Hmm ... laufen Sie in ein Fokusproblem? Ich habe das Aero-Thema geladen, und ich sehe Ihre TextBox eingefügt, wenn die TextBox den Fokus oder Mouse-Over hat. Sie können dies ziemlich deutlich sehen, wenn Sie wie so eine zweite TextBox hinzu:

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

Der Standardstil für Aero verwendet eine Control, die die Textbox Grenze setzt das ListBoxChrome zu verwenden, das einige zusätzliche Eigenschaften festlegen aussieht, wenn die Kontrolle hat Fokus oder Maus über.

Alternativ bindet der Standard-Style für das Luna-Thema den enthaltenen BorderBrush direkt an die TemplateBinding, was bedeutet, dass dies immer respektiert wird (und warum es in XP/Luna und nicht in 2008 oder Vista funktioniert).

+0

Wenn ich das Aero-Thema wie oben anwende, ist das von Ihnen beschriebene Verhalten tot. Allerdings ohne dieses Thema, dann sehe ich das Problem ursprünglich beschrieben. – sparker