我是WPF的新手,我有一个使用gridview的绑定listview来显示对象及其属性的列表。我的整个项目使用MaterialDesign的自定义样式,为所有内容赋予深色主题。
我想在列表视图中的项目上添加双击功能,发现可以通过更改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>
我期望的是一个看起来像https://i.imgur.com/Z0oORhE.png且可以双击的ListView。
但是我得到的是一个看起来像https://i.imgur.com/6o6SCyW.png且可以双击的ListView。
这是没有BasedOn="{StaticResource {x:Type ListViewItem}}"
https://i.imgur.com/OO4Rg2v.png
答案 0 :(得分:0)
您可以在列表视图本身中添加mousedoubleclick处理程序。
<ListView MouseDoubleClick="ListView_MouseDoubleClick"
并获得对该行数据上下文的引用:
void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var hsl = ((FrameworkElement)e.OriginalSource).DataContext as HitSoundLayer;
如果双击标题或分界线,可能必须对hsl进行空检查以免发生不良情况。
答案 1 :(得分:0)
您应该基于MaterialDesignGridViewItem
资源来创建样式:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignGridViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="HitsoundLayer_MouseDoubleClick"/>
</Style>
</ListView.ItemContainerStyle>