嗨我有一个Datagrid
,它绑定到自定义AutoCAD图层对象的ObservableCollection。其中3列是DataGridTextColumns,并且可以正常工作。不过,我也有一个DataGridTemplateColumn
,其中包含一个包含标签和Rectangle
的StackPanel。我正在使用标签来显示图层的ACI或RGB值,具体取决于它的设置方式以及在矩形中显示的颜色。该矩形有一个鼠标向下的事件,它启动一个颜色选择器对话框,以便用户可以为该图层选择一种新的颜色。此功能起作用。不起作用的是,单元格(标签和矩形)的内容仅显示在选定的行中,并且单元格单击,而它们需要始终可见。DatagridTemplate列内容只有在选定行并单击单元格时才可见
我曾尝试在DataTemplate中使用网格,并使用网格的FocusManager.Focused元素给予矩形焦点,但这并未改变行为。
<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;
}