选择一个孩子后,WPF TreeviewItem父选择事件?
我有一个标准的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;
处理程序:
private void CoreSupplierSelected(object sender, RoutedEventArgs e) { TreeViewItem item = e.OriginalSource as TreeViewItem; MaterialSelectionData thicknessData = editInterface.GetCoreThicknessData(new List() { item.Tag }, null); List 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() { ((TreeViewItem)item.Parent).Tag }, new List() { item.Tag }); List 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; }
这必须与您的代码有关。 我现在正在使用TreeView,子选择不会触发父选择。 你可以发布更多的代码吗? 也许我可以发现这个问题。
我有所纠正。 在仔细查看我的代码并运行一些测试之后,这似乎是控件的正常行为。 如果您不希望选择冒泡,那么您应该将RoutedEventArgs
参数的Handled
值设置为true
。
编辑:
这是我使用的XAML:
和代码:
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; }
如果对e.Handled = true
语句进行了注释,则在选择子对象时将触发Parent_Selected
。
好吧,我发现了我的问题。
当我在子选择事件处理程序中设置断点时,该问题才会出现。 如果没有设置断点,则一切正常,并且数据网格将被填充,就像选择了子项一样。 如果在父选定事件中仅设置了断点,则在选择子项时不会触发断点。 但是只要在子项中添加断点,就会直接触发父选定处理程序中的断点。
任何人都可以解释这个或者它只是一个错误是Visual Studio吗?
在点击子treenode之后选择父treenode的问题可能有另一个可能的原因:如果在treeview的选择中更改了事件处理程序,则将Focus更改为除树视图本身之外的其他控件(例如,调用另一个控件的Focus()函数),它将导致树视图在当前事件之后引发另一个选择更改事件,这将将父设置为选中。 (为了使调试更加困难,visual studio调用堆栈窗口不会告诉哪个例程触发了此事件。)
一个相关的问题(和答案)在这里: TreeView在用户选择子项后自动选择父项
可能不是这个问题的原因,但是发布在这里以防万一有人被这个“奇怪”问题(就像我刚刚遭遇的那样)所驱使。
上述就是C#学习教程:选择一个孩子后,WPF TreeviewItem父选择事件?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/950833.html