Dej*_*vic 2 c# wpf styles listbox focus
好的,我无法相信没有关于此的在线资源.我想做一件简单的事情,并在ListBox项目被选中时更改项目的样式,并且它的父项ListBox已失去焦点.
我们一直在使用VisualStateManager用于这一目的,但由于有重叠的Selected,SelectedFocused并Focused指出,有选择持有例如CTRL项目时介绍了一些bug(错误项显示为被选中).我决定用Triggers 修复它,发现当ListBox失去焦点时似乎无法触发.
我的问题是实现这种行为的正确方法是什么,请不要说 "覆盖SystemColors"......
编辑:
好吧,我已经投了两个答案但是选择了Viv的回答,因为他的答案使它的工作方式与原版完全相同,ListBox而我没有鼠标悬停和我已经使用的其他样式的问题.我已经看过附属物的使用Selector,但从未尝试过IsSelectionActive,它就像一个魅力.我建议为这类问题寻找触发器,尽管VisualStateManager在WPF中更新.我认为显然存在一些可以避免的重叠状态问题.
再次感谢Viv和Richard为我的问题提供了两种实现解决方案的方法.
好的,我无法相信没有关于此的在线资源.我想做一个简单的事情,当它被选中时改变ListBox项的样式,它的父ListBox失去了焦点.
猜您寻找MultiTrigger与IsSelected=true和Selector.IsSelectionActive=false?
像这样的东西:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListBox Margin="15">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Foreground"
Value="Blue" />
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected"
Value="true" />
<Condition Property="Selector.IsSelectionActive"
Value="false" />
</MultiTrigger.Conditions>
<Setter Property="Foreground"
Value="Red" />
</MultiTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBoxItem Content="A" />
<ListBoxItem Content="B" />
<ListBoxItem Content="C" />
</ListBox>
<ListBox Grid.Column="1"
Margin="15">
<ListBoxItem Content="A" />
<ListBoxItem Content="B" />
<ListBoxItem Content="C" />
</ListBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)
现在当ListBox选择左侧的项目然后如果实际ListBox失去焦点时,它会得到一个红色,Foreground如:

Foreground只是一个例子,使用MultiTrigger你可以调整Style你认为合适的.
| 归档时间: |
|
| 查看次数: |
2195 次 |
| 最近记录: |