【问题标题】:SelectedItemChanged event for WPF custom TreeView controlWPF 自定义 TreeView 控件的 SelectedItemChanged 事件
【发布时间】:2020-10-08 18:57:24
【问题描述】:

C#,WPF。我对 TreeView 控件进行了子类化,无法使 SelectedItemChanged 事件正常工作。我看不出我所做的与thisthis 等示例有何不同。

代码将运行,但在 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
        }
    }
}

我想知道这是否与 Microsoft 文档中提到的 &lt;object SelectedItemChanged="RoutedPropertyChangedEventHandler"/&gt; 有关,但我不知道我将在哪里/如何实现它,并且在其他示例中没有看到任何等效项。

使事件public 不会改变行为。

【问题讨论】:

  • TreeViewControl_SelectedItemChanged 应该在 MainWindow 类中

标签: c# wpf xaml treeview


【解决方案1】:

问题只是由于将事件处理程序放在错误的类中引起的。感谢 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");
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-05
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多