![](/img/trans.png)
[英]wpf datagrid rowheader expander togglebuttton style from resource dictionary
[英]WPF DataGrid Columns in Style or resource
是否可以在樣式或資源中聲明DataGrid
列? 我想做這樣的事情:
<....Resources>
<DataGridColumns x:Key="dgcDataGridColumns">
<DataGridTextColumn />
<DataGridTextColumn />
</DataGridColumns
</....Resources>
<DataGrid Columns="{StaticResource dgcDataGridColumns}" />
原因是我必須共享4個不同DataGrids
的列定義。 有沒有辦法實現這個目標? 最好的是沒有代碼背后!
x:共享有助於避免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>
DataGrid的Columns屬性沒有setter,因此不可能。 但是你可以這樣做:
<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>
我不認為你可以,因為在那種情況下你沒有指定模板或樣式,而是實際的Column對象。 我不認為數據網格在這樣分享時會很好地發揮作用; 我認為你會得到一個例外,“這個UIElement已經是另一個UIElement的孩子了”。
所以我嘗試了以下......與你所說的略有不同。 但我得到了這個例外:
{“DataGridColumn with Header”已經存在於DataGrid的Columns集合中.DataGrids不能共享列,也不能包含重復的列實例。\\ r \\ nParameter name: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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.