私は WPF が初めてで、既存のコードに苦しんでいます。
多くの枝/葉を持つ木があります。1 つのブランチに 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>