我是WPF的新手,并且遇到了现有的代码。WPF:单击TreeView内的DataGrid行不会触发TreeView.SelectedItemChanged
我们有一棵树,里面有许多树枝/树叶。在一个分支中,我们有一个DataGrid。
如果我们点击网格的空白区域(没有行),然后调用TreeView.SelectedItemChanged。在我们的例子中,SelectedItem ='SelectedGridBorder'(见下面的XAML)
但是,如果我们点击网格的一行/单元格,那么行会被聚焦,但TreeView.SelectedItemChanged不会被调用。 因此,TreeView.SelectedItem仍然是之前选择的项目。 是可以实现这个(根据我)的逻辑行为,所以当点击一行时,应该自动调用TreeView.SelectedItemChanged,并且TreeView.SelectedItem应该是'SelectedGridBorder',就像点击没有行的网格区域是。
为什么'SelectedItemChanged'点击网格行或点击没有行的网格会有所不同?
谢谢。
XAML:
<TreeView x:Name="CalculationDataTree" .....>
<Cinch:EventCommander.Mappings>
<Cinch:CommandEvent
Command="{Binding Path=DataContext.SelectionChangeCommand ....
Event="SelectedItemChanged"
Cinch:CommandEvent.CommandParameter="{Binding ElementName=CalculationDataTree,Path=SelectedItem}"/>
...
<TreeViewItem x:Name="Params" ...>
<TreeViewItem.Header>
<TextBlock>Parameters</TextBlock>
</TreeViewItem.Header>
<TreeViewItem x:Name="Dates" Margin="0,6,0,0">
<TreeViewItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="4,10">Date(s)</TextBlock>
<ContentControl Margin="4,6" Content="{Binding}" ContentTemplate="{StaticResource OwnEditorTemplate}" />
</StackPanel>
</TreeViewItem.Header>
</TreeViewItem>
<Border Name="SelectedGridBorder" ... >
<StackPanel Orientation="Vertical">
<TextBlock Margin="4,10">Other parameters</TextBlock>
<StackPanel Orientation="Horizontal">
<DockPanel>
<dg:DataGrid Height="300" Width="600" Name="dataGrid" ....>
<dg:DataGrid.Columns>
...
</dg:DataGrid.Columns>
感谢您的意见,在此同时,我也定了,这个其他Q帮我:HTTP://计算器.COM /问题/ 6586488/WPF的树视图 - selecteditemchanged - 不烧。我在Grid_GotFocus中调用'(VisualHelper.GetAncestorByType(e.Source作为DependencyObject,typeof(TreeViewItem))作为TreeViewItem).IsSelect = true;'我想知道它是如何工作的,因为grid不是直接TreeViewItem祖先,但我调试,它有 - 但你已经明确(WPF自动创建它)。谢谢! – Zotyi