嗨,我有一个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;
}