DataGrid
列をスタイルで、またはリソースとして宣言することは可能ですか?私はこのようなことをしたいと思います:
<....Resources>
<DataGridColumns x:Key="dgcDataGridColumns">
<DataGridTextColumn />
<DataGridTextColumn />
</DataGridColumns
</....Resources>
<DataGrid Columns="{StaticResource dgcDataGridColumns}" />
その理由は、4つの異なるDataGrids
の列定義を共有する必要があるためです。これを達成する方法はありますか?コードが背後にないのが最善です!
DataGridのColumnsプロパティにはセッターがないため、セッターがない可能性があります。ただし、次のようなことができます。
<Window.Resources>
<Controls:DataGrid x:Key="PersonDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding .}" x:Shared="False">
<Controls:DataGrid.Columns>
<Controls:DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}" IsReadOnly="True"/>
<Controls:DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}" IsReadOnly="True"/>
</Controls:DataGrid.Columns>
</Controls:DataGrid>
</Window.Resources>
<StackPanel>
<ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Customers}"></ContentControl>
<ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Employees}"></ContentControl>
</StackPanel>
x:Sharedは、MattS423が持っている例外を回避するのに役立ちます。
<Window.Resources>
<DataGridTextColumn x:Key="dgtcFirstName" x:Shared="False" Header="First Name" Binding="{Binding FirstName}"/>
<DataGridTextColumn x:Key="dgtcSecondName" x:Shared="False" Header="Second Name" Binding="{Binding SecondName}"/>
</Window.Resources>
<Grid>
<StackPanel>
<DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid1" Width="200">
<DataGrid.Columns>
<StaticResource ResourceKey="dgtcFirstName"/>
<StaticResource ResourceKey="dgtcSecondName"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid2" Width="200">
<DataGrid.Columns>
<StaticResource ResourceKey="dgtcSecondName"/>
<StaticResource ResourceKey="dgtcFirstName"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Grid>
そのような状況では、テンプレートやスタイルではなく、実際のColumnオブジェクトを指定しているので、できるとは思いません。そのように共有する場合、データグリッドはうまく機能しないと思います。 「このUIElementはすでに別のUIElementの子です」という範囲で例外が発生すると思います。
だから私は以下を試しました...あなたが話しているものとは少し異なります。しかし、私はこの例外を受け取りました:
{"ヘッダー付きのDataGridColumn ''はDataGridのColumnsコレクションに既に存在します。DataGridsは列を共有できず、重複する列インスタンスを含めることはできません。\ r\nパラメーター名:item"}
このXAMLで:
<Grid.Resources>
<DataGridTextColumn x:Key="MyColumn" />
</Grid.Resources>
<DataGrid>
<DataGrid.Columns>
<StaticResource ResourceKey="MyColumn" />
</DataGrid.Columns>
</DataGrid>
<DataGrid>
<DataGrid.Columns>
<StaticResource ResourceKey="MyColumn" />
</DataGrid.Columns>
</DataGrid>