c# - C# WPF Treeview ItemContainerStyle 使 mouseclick 事件发送者丢失 TreeviewItem 引用
问题描述
我有这个有效的代码,
private void TreeSetup_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
if (sender is TreeViewItem)
{
((TreeViewItem)sender).IsSelected = true;
}
e.Handled = true;
}
private void TreeSetup_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
ContextMenu PopupMenu = this.FindResource("cmButton") as ContextMenu;
if (TreeSetup.SelectedItem != null)
{
PopupMenu.PlacementTarget = sender as TreeViewItem;
PopupMenu.IsOpen = true;
}
}
但是一旦我添加了这个 ItemContainerStyle,
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
我的鼠标按下事件的发送者变成了 TreeView 而不是 TreeViewItem。有谁知道原因并解决这个问题?
解决方案
我在 ItemContainerStyle 下绑定了 mousedown 事件:
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<EventSetter Event="MouseRightButtonDown" Handler="TreeSetup_MouseRightButtonDown"/>
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
推荐阅读
- python - 通过 Selenium 点击 Twitter 收藏按钮无效
- python - python:如何使 pd 数据框标头的第二个组件成为顶行
- android - 线程规则 AsyncTask
- css - 折叠导航栏背景颜色更改
- json - PowerShell 嵌套对象引用
- duplicates - 基于OpenMesh在OpenFlipper中进行孔洞填充时如何去除重复的顶点及其顶点句柄
- reactjs - 调度不改变 redux 状态
- python - PySpark Streaming:Py4JJavaError:AnalysisException:'找不到表或视图:推文;第 1 行 23'
- css - 一些 CSS,在开发中运行良好,在构建版本中不起作用
- c++ - 如何使用 Gradle DSL(领域特定语言)上的文档?