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