WPF的相对n00b。我有一个ListView,如下:
<ListView>
<ListView.View>
<GridView>
...
</GridView>
</ListView.View>
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="ItemDoubleClick"/>
</Style>
</ListView.Resources>
</ListView>在我的app.xaml中,我有以下风格:
<Style TargetType="{x:Type ListView}">
<Setter Property="ItemContainerStyle" Value="{DynamicResource ListViewItemStyle}"/>
</Style>
<Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border x:Name="Border" Padding="4">
<GridViewRowPresenter x:Name="ItemText"
TextBlock.FontSize="14" TextBlock.Foreground="{x:Static SystemColors.ControlDarkDarkBrush}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsSelected" Value="False"/>
</MultiTrigger.Conditions>
<Setter TargetName="ItemText" Property="TextBlock.Foreground" Value="{x:Static SystemColors.WindowTextBrush}"/>
</MultiTrigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="{x:Static SystemColors.HighlightBrush}"/>
<Setter TargetName="ItemText" Property="TextBlock.Foreground" Value="{x:Static SystemColors.HighlightTextBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>但是,一旦我设置了ItemContainerStyle,双击就不再触发。如果我移除它,它会触发,但我的ListViewItems没有样式。
这里我漏掉了什么?
发布于 2011-08-25 00:40:59
您的本地资源将被应用程序资源样式覆盖,这会更改ListView的ItemContainerStyle属性。我建议直接在ListView.ItemContainerStyle上设置样式,并基于现有样式:
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}"
BasedOn="{StaticResource {x:Type ListViewItem}}">
<EventSetter Event="MouseDoubleClick" Handler="ItemDoubleClick"/>
</Style>
</ListView.ItemContainerStyle>(这假设使用隐式样式,因此要么在应用程序资源中删除样式的键,要么在BasedOn属性中使用该键直接引用它)
发布于 2011-08-25 00:51:12
根据H.B.的回答,一个元素可以有一个隐式样式,也可以直接设置它的Style属性(我称之为显式样式),但不能同时设置这两个属性。一旦你在ListViewItem上设置了Style属性,它将不再使用任何隐式样式。
由于ListView.ItemContainerStyle只是设置ListViewItem.Style属性的一种简单方法,因此它具有缩短您定义的隐式样式的相同效果。
https://stackoverflow.com/questions/7179090
复制相似问题