c# - 单击时如何检索控件的容器

标签 c# .net wpf xaml mvvm

我有一个 TreeView,其中包含许多 TreeViewItems。每个 TreeViewItem 都包含一个水平方向的 StackPanel,后者又包含一个图像和一个标签。

当用户单击 TreeViewItem 时,我想获取该 TreeViewItem 的引用。相反,源将作为标签或图像返回,具体取决于用户单击 TreeViewItem 的哪一部分。

我无法使用 selectedItemChanged 事件,因为这严格来说是每次单击 TreeViewItem 时都必须发生的操作。

这是我的 XAML:

<TreeView DockPanel.Dock="Left" 
          Name="tvSchema" 
          AllowDrop="True"
          TreeViewItem.PreviewMouseLeftButtonDown="tvSchema_PreviewMouseLeftButtonDown">
</TreeView>

下面是当用户单击某个 TreeViewItem 时尝试检索所选 TreeViewItem 的代码:

private void tvSchema_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
     object x = e.OriginalSource; //Returns TextBlock
     object y = e.Source; //Returns Label
     object z = sender; //Returns TreeView
}

如何获取实际的 TreeViewItem?

最佳答案

尝试这样的事情:

<TreeView>
  <TreeView.Resources>
    <Style TargetType="{x:Type TreeViewItem}">
      <EventSetter
        Event="TreeViewItem.PreviewMouseLeftButtonDown"
        Handler="MyHandler"/>
    </Style>
  </TreeView.Resrouces>
  ...
</TreeView>

MyHandler中,sender将是TreeViewItem

关于c# - 单击时如何检索控件的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13266624/

相关文章:

c# - Steam 授权

c# - 强制 C# 应用程序在具有多核处理器的 PC 中使用单核

.net - 为什么我的析构函数从未被调用过?

wpf - 如何将 wpf MessageBox.Owner 设置为桌面窗口,因为 SplashScreen 关闭 MessageBox

WPF 路由命令启用适用于菜单,但不适用于按钮

c# - 验证客户端下拉列表中选定月份和年份的选定日期

c# - Android EditText 设置最大长度

.net - 带有 ListView 的 MVVM 按钮事件未获取所选项目

.net - 多线程应用程序中的单元测试事件

c# - 如何在 WPF 应用程序页面而不是窗口中禁用最大化按钮