データグリッドをカスタマイズする必要があるため、WPF データグリッドを拡張する独自のデータグリッドを作成します。以下に投稿された小さな関連コード-
public class ExtendedDataGrid : DataGrid
{
public ExtendedDataGrid()
{
this.SelectionMode = DataGridSelectionMode.Extended;
}
}
ウィンドウでそのインスタンスを作成し、完全に正常に機能するように設定SelectionMode
し、dataGrid のSingle
プロパティを設定します。Single
これまでのところ、すべて良いです。
しかし、DataGrid を ControlTemplate に配置した場合、SelectionMode
に設定されることはありませんSingle
。たとえば、SelectionMode は、DataGrid のコンストラクターでその値を明示的に設定した場合、XAML 経由で DP が設定されません。
問題を再現する小さなサンプルはこちらです -
<Grid>
<Grid.Resources>
<ControlTemplate x:Key="MyTemplate">
<local:ExtendedDataGrid ItemsSource="{Binding Collection,
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType=Window}}"
SelectionMode="Single">
<local:ExtendedDataGrid.Columns>
<DataGridTextColumn Binding="{Binding}"/>
</local:ExtendedDataGrid.Columns>
</local:ExtendedDataGrid>
</ControlTemplate>
</Grid.Resources>
<ContentControl Template="{StaticResource MyTemplate}"/>
<local:ExtendedDataGrid ItemsSource="{Binding Collection,
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType=Window}}"
Grid.Row="1" SelectionMode="Single">
<local:ExtendedDataGrid.Columns>
<DataGridTextColumn Binding="{Binding}"/>
</local:ExtendedDataGrid.Columns>
</local:ExtendedDataGrid>
</Grid>
2 番目の DataGrid では正常に動作しますが、ControlTemplate 内に配置された DataGrid では動作しません。なぜこの奇妙な行動?DataGrid コードのバグですか?
注- SelectionMode を Extended に明示的に設定している DataGrid コンストラクターの行にコメントを付けると、正常に動作します。私はそれがデフォルト値であることを知っており、それを削除した後、両方のケースで正常に動作することを知っています (また、デフォルト値を設定する方法はたくさんあります) が、あるケースでは機能し、他のケースでは機能しない理由を知りたいです。