WPF-ListBox-Trigger funktioniert nicht für IsFocused Eigenschaft
Möchte ich style meine ListBox
und zeigt eine Border
um ihn herum. Ich möchte dies zu verbergen Border
wenn ListBox
Fokus erhält:
<Trigger Property="IsFocused" Value="True">
<Setter Property="Visibility" TargetName="border" Value="Collapsed"/>
</Trigger>
Gleiche Sache, die ich verwende in TextBox
auch und es funktioniert einwandfrei.
Warum ist diese Trigger
funktioniert nicht für ListBox
?
Edit:
Habe ich dieses Style
für meine ListBox
:
<ControlTemplate TargetType="{x:Type local:ListBox}">
<Border SnapsToDevicePixels="true" x:Name="Bd" CornerRadius="5"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}" Padding="1">
<Grid>
<local:ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</local:ScrollViewer>
<Border CornerRadius="5" Background="Red" x:Name="border">
<TextBlock VerticalAlignment="Center" FontWeight="Bold" Foreground="White"
Text="{TemplateBinding Message}" FontFamily="Courier New" />
</Border>
</Grid>
</Border>
</DockPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Visibility" TargetName="border" Value="Collapsed"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd"
Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Könnten Sie bitte mehr Kontext? Können Sie die style-definition, wie Sie anwenden der Formatvorlage im Listenfeld und Textfeld?
Ich habe aktualisiert mein code Frage
Ich habe aktualisiert mein code Frage
InformationsquelleAutor viky | 2009-11-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich auch Probleme bei deinem Beispiel korrekt funktioniert. Ich habe festgestellt, dass, wenn Sie klicken Sie auf eine
ListBoxItem
, die IsFocused Eigenschaft wirdFalse
für dieListBox
, weil es wirklich dieListBoxItem
, die den Fokus hat. Du wirst sehen, der kommentierte XAML-Stil unten zu erreichen den gewünschten Effekt zu erzielen, das hat nicht funktioniert.Ich könnte mir vorstellen, dass die kommentierte XAML würde funktionieren, wenn Sie geklickt haben, irgendwo in der
ListBox
wo es keine Gegenstände (d.h. nicht-ListBoxItem
weißen Flächen, die innerhalb derListBox
). Edit: Gerade ausprobiert, funktioniert nicht, entweder aus irgendeinem Grund.Was hat zwar funktioniert, aber war schaffen einen Stil für alle
ListBoxItem
Objekte innerhalb derListBox
. Diesen Stil im Grunde hatEventSetters
setztBorderBrush
Eigenschaft von MyListBox angemessen, wenn Sie abgefeuert werden.XAML:
Code-Behind:
Hoffe, das half ein wenig!
EDIT:
Ich war nicht zufrieden mit meiner ursprünglichen Antwort (oben), weil ich gerne Dinge zu tun, deklarativ, wenn ich code in WPF (kein code-behind). Ich kam mit einer Lösung, die mit einfachen Farb-Animationen, die Trigger aus der
GotFocus
undLostFocus
routingereignisse.Hier ist es:
Happy coding!
EDIT 2:
Ich schaute auf Ihre aktualisierten code, und sah, was Sie versucht zu tun (denke ich). Ich fand das neat-o-animation bei Lester ' s WPF-Blog. Sie können versuchen, indem Sie diese in Ihrem
<ControlTemplate.Triggers>
Sammlung:Bitte siehe meinen "Edit 2" - Abschnitt meiner Antwort. Hoffe, das hilft!
dies ist nicht für mich arbeiten, Wie bekomme ich IsFocused Eigentum arbeiten?
InformationsquelleAutor Mark Carpenter
Für ListBox IsFocused nicht aktualisieren, weil der Fokus nicht geht, list box, aber es geht zum Bereich, der durch die listbox bedeutet, dass die ItemsPresenter enthält ListBoxItems. Ich habe einen workaround zu diesem problem.
Im MouseDown-event-handler der ListBox, ich nenne Focus () - Methode. Es legt die IsFocused-Eigenschaft auf true und mein trigger funktioniert.
InformationsquelleAutor viky
Versuchen Sie dieses, Es funktioniert.
InformationsquelleAutor Matrix