2011-07-08 125 views
4

我有一个WPF Window,它基本上有一个ListBox,它显示项目列表。当列表失去焦点时,WPF SelectedItem颜色消失

然后我有一个ListView基本上显示ListBoxSelectedItem的细节。

事情是,当焦点不再在ListBox上时,突出显示的颜色消失,我看不到哪个主项目被选中了。

你知道我该如何解决这个问题吗?

回答

6

的最快方法是使用一种风格的一个ListBoxItem覆盖默认的系统颜色(即确保该项目保持突出显示。):

<Style TargetType="ListBoxItem"> 
    <Style.Resources> 
     <!--SelectedItem with focus--> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
     Color="LightBlue" Opacity=".4"/> 
     <!--SelectedItem without focus--> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" 
     Color="LightBlue" Opacity=".4"/> 
    </Style.Resources> 
</Style> 

这是怎么样的一个用于为列表项定义ItemTemplate的稍微复杂(但更容易控制)的方法的捷径。网上有很多例子,所以我不会在这里提到。

+0

两个答案都以相同的解决方案结束,但我选择了这个答案,因为答案包含在帖子中。 – SRKX

0
<Style> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource= 
         {RelativeSource Mode=FindAncestor, 
         AncestorType={x:Type ListBoxItem}}, 
         Path=IsSelected}" 
     Value="True"> 
     <Setter Property="Panel.Background" Value="Red" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
0

这个问题也可以通过数据绑定来解决。 如果ListView/ListBox SelectedItem绑定到实现INotifyPropertyChanged并且绑定模式为“TwoWay”的ViewModel中的属性,那么当ListView/ListBox再次获得焦点时,数据绑定将自动选择先前选择的项目。