我对WPF
有点陌生,我有一个绑定的listview
,它使用gridview
来显示对象及其属性的列表。我的整个项目使用了MaterialDesign
中的一个自定义样式,它给所有的东西一个 * dark-theme *。
我想添加doubleclick
功能到我的listview
中的项目,我发现,我可以通过改变ListViewItem
的样式来做到这一点。然而,这覆盖了我的MaterialDesign
主题的默认样式,项目变得丑陋。
然后我添加了BasedOn="{StaticResource {x:Type ListViewItem}}"
以恢复默认样式,但随后绑定停止工作,它停止显示对象的属性?
有没有更好的方法将Setter添加到元素的样式中?设置样式如何改变数据绑定?
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListViewItem}}">
<EventSetter Event="MouseDoubleClick" Handler="HitsoundLayer_MouseDoubleClick"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="_Name" Width="120" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="_Amount" Width="90" DisplayMemberBinding="{Binding Times.Count}" />
<GridViewColumn Header="_SampleSet" Width="120" DisplayMemberBinding="{Binding SampleSetString}" />
<GridViewColumn Header="_Hitsound" Width="120" DisplayMemberBinding="{Binding HitsoundString}" />
<GridViewColumn Header="_Sample Path" Width="1000" DisplayMemberBinding="{Binding SamplePath}" />
</GridView>
</ListView.View>
我所期望的是一个如下所示的ListView,它可以双击。x1c 0d1x
但我得到的是一个列表视图,看起来像下面的
,并有工作双击。
这是没有BasedOn="{StaticResource {x:Type ListViewItem}}"
时的样子
2条答案
按热度按时间flvtvl501#
您的样式应该以
MaterialDesignGridViewItem
资源为基础:fwzugrvs2#
您可以将mousedoubleclick处理程序添加到列表视图本身。
并获取对该行的datacontext的引用:
如果双击标题或分隔线,您可能必须对hsl进行null检查,以避免出现不好的情况。