c# - WPF 自定义 TreeView 控件的 SelectedItemChanged 事件
问题描述
C#,WPF。我对 TreeView 控件进行了子类化,无法使SelectedItemChanged
事件正常工作。我看不出我在做什么与this和this等示例不同。
代码将运行,但InitializeComponent()
出现以下错误:
ArgumentException:无法绑定到目标方法,因为它的签名或安全透明度与委托类型的不兼容。
这个最小的项目演示了这个问题:
<Window x:Class="TEST.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:custom="clr-namespace:TEST"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<custom:CustomTreeView x:Name ="treeViewConfig2"
SelectedItemChanged="TreeViewControl_SelectedItemChanged" />
</Grid>
</Window>
namespace TEST
{
/// <summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//CustomTreeView tree = new CustomTreeView();
}
}
public class CustomTreeView : TreeView
{
public CustomTreeView() { } // default constructor
private void TreeViewControl_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<Object> e)
{
// Do something
}
}
}
我想知道这是否与<object SelectedItemChanged="RoutedPropertyChangedEventHandler"/>
Microsoft 文档中提到的内容有关,但我不知道我将在哪里/如何实现它,并且在其他示例中没有看到任何等效的东西。
举办活动public
不会改变行为。
解决方案
问题只是由于将事件处理程序放在错误的类中引起的。感谢 ASh 在评论中指出了这一点。为了他人的利益,这是工作代码:
<Window x:Class="TEST.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:custom="clr-namespace:TEST"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<custom:CustomTreeView x:Name ="treeViewConfig2"
SelectedItemChanged="TreeViewControl_SelectedItemChanged" />
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
CustomTreeView tree = new CustomTreeView();
}
private void TreeViewControl_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<Object> e)
{
MessageBox.Show((string)e.NewValue + " was selected");
}
}
public class CustomTreeView : TreeView
{
public CustomTreeView() {
Items.Add("Item 1");
Items.Add("Item 2");
}
}
推荐阅读
- python-3.x - Sympy 模块。buildozer 中的错误:没有名为 sympy.testing 的模块
- c++ - 在时间复杂度的背景下,成本意味着什么?
- python - Python 和 OpenCV:-215:尝试调用 calibrateCamera 时出现断言失败错误
- c - 指向结构数组的全局指针
- javascript - 混合类型或保留类型更高效?
- xml - 如何在 Netbeans IDE 12 中获得漂亮的 xhtml 格式?
- spring - Spring响应式编程和关系数据库:使用关系
- c++ - vscode 编译器:“预期;在声明结束时”
- c++ - 如何确定一个字符串是否包含一个字符,然后是一个数字?
- html - 如何在 pywebview 中使用自定义字体