选择一个孩子后,WPF TreeviewItem父选择事件?

use*_*195 3 c# wpf treeview events

我有一个标准的WPF树视图项目,其中包含许多子项.以编程方式创建树时,我将选定的事件处理程序添加到父项和子项.我发现的是,当子项目选择事件被触发并被处理后,然后触发父事件.这个问题是我根据所选项填充数据网格.因此,每次选择子项后,datagrid都会重置为父项选择.

如果这个项目是正常的,或者我做错了什么以及如何解决它,请有人解释一下.

如果您需要更多信息,请告诉我.

连接事件处理程序:

//parent
TreeViewItem tvi = new TreeViewItem();

                    tvi.Header = str;

                    tvi.Selected += CoreSupplierSelected

//child
TreeViewItem tvi = new TreeViewItem();
                            tvi.Header = str;
                            tvi.Tag = resinSystems.Values[i];
                            tvi.Selected += CoreResinSystemSelected;
Run Code Online (Sandbox Code Playgroud)

处理程序:

private void CoreSupplierSelected(object sender, RoutedEventArgs e)
    {
        TreeViewItem item = e.OriginalSource as TreeViewItem;
        MaterialSelectionData thicknessData = editInterface.GetCoreThicknessData(new List<object>() { item.Tag }, null);
        List<string> columnNames = thicknessData.DisplayFieldTitles;
        columnNames.Insert(0,"");
        DataTable dt = GUICommon.DatableConverter.ToDataTable(thicknessData.DisplayData, columnNames);
        dtgCores.ItemsSource = dt.AsDataView();
        dtgCores.Columns[0].Visibility = System.Windows.Visibility.Collapsed;
    }

    private void CoreResinSystemSelected(object sender, RoutedEventArgs e)
    {

        TreeViewItem item = e.OriginalSource as TreeViewItem;
        GX3MaterialSelectionData thicknessData = editInterface.GetCoreThicknessData(new List<object>() { ((TreeViewItem)item.Parent).Tag }, new List<object>() { item.Tag });
        List<string> columnNames = thicknessData.DisplayFieldTitles;
        columnNames.Insert(0, "");
        DataTable dt = GUICommon.DatableConverter.ToDataTable(thicknessData.DisplayData, columnNames);
        dtgCores.ItemsSource = dt.AsDataView();
        e.Handled = true;
        dtgCores.Columns[0].Visibility = System.Windows.Visibility.Collapsed;


    }
Run Code Online (Sandbox Code Playgroud)

Spe*_*ort 7

这必须与您的代码有关.我现在正在使用TreeView,子选择不会触发父选择.你可以发布更多的代码吗?也许我可以发现这个问题.

我纠正了.在仔细查看我的代码并运行一些测试之后,这似乎是控件的正常行为.如果您不希望选择冒泡,那么您应该将Handled值设置trueRoutedEventArgs参数.

编辑:

这是我使用的XAML:

<TreeView Width="200" Height="300">
    <TreeViewItem Header="Parent" Selected="Parent_Selected">
        <TreeViewItem Header="Child" Selected="Child_Selected" />
    </TreeViewItem>
    <TreeViewItem Header="Parent" Selected="Parent_Selected">
        <TreeViewItem Header="Child" Selected="Child_Selected" />
    </TreeViewItem>
</TreeView>
Run Code Online (Sandbox Code Playgroud)

和代码:

private void Parent_Selected(object sender, RoutedEventArgs e)
{
    bool test = false;
}

private void Child_Selected(object sender, RoutedEventArgs e)
{
    bool test = false;
    // e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

如果e.Handled = true声明留下注释,则在选择子对象时Parent_Selected 触发.