こんにちはDatagrid
、カスタム AutoCAD 画層オブジェクトの ObservableCollection にバインドされている があります。列のうち 3 つは DataGridTextColumns であり、正しく機能します。ただしDataGridTemplateColumn
、ラベルを含む StackPanel とRectangle
. ラベルを使用して、レイヤーの設定方法に応じてレイヤーの ACI または RGB 値を表示し、長方形に色を表示しています。四角形には、カラー ピッカー ダイアログを起動するマウス ダウン イベントがあり、ユーザーはレイヤーの新しい色を選択できます。この機能は機能します。うまくいかないのは、セルの内容 (ラベルと四角形) が、選択された行とクリックされたセルにのみ表示され、常に表示される必要があることです。
DataTemplate 内で Grid を使用し、Grid の FocusManager.Focused 要素を使用して Rectangle フォーカスを指定しようとしましたが、動作は変わりませんでした。
<t:DataGrid x:Name="layersGrid" ItemsSource="{Binding Layers}"
SelectedItem="{Binding SelectedLayer, Mode=TwoWay}" SelectionMode="Single">
<t:DataGridTemplateColumn Visibility="Visible">
<t:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid FocusManager.FocusedElement="{Binding ElementName=swatch}">
<StackPanel Orientation="Horizontal">
<Label Content="{Binding Colour.ColourProperty}"/>
<Rectangle Name="swatch" Fill="{Binding Colour, Converter={StaticResource colourConverter}}"
MouseLeftButtonDown="swatch_MouseLeftButtonDown"/>
</StackPanel>
</Grid>
</DataTemplate>
</t:DataGridTemplateColumn.CellEditingTemplate>
</t:DataGridTemplateColumn>
</t:DataGrid.Columns>
</t:DataGrid>
さらに、モデル ビューでレイヤーの色を変更すると、別の行が選択され、変更された行が再度選択されるまで、四角形は更新されません。
private void swatch_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Colour col = LaunchColourPickerCode();
((LayersModel)this.Resources[MODEL]).SelectedLayer.Colour = col;
}