我正在使用WPF应用程序,并且我不想复制/粘贴代码。我想要像React / JavaScript中那样的可重用元素。在这种特殊情况下,我有一个DataGrid,我想在具有不同绑定/变量的应用程序的不同位置使用它。我不想每次都复制/粘贴DataGrid-XAML
这是我的DataGrid模板的定义:
<Window.Resources>
<ControlTemplate x:Key="PersonTableTemplate" >
<DataGrid AutoGenerateColumns="False" Background="Transparent" RowBackground="Transparent" IsReadOnly="True" HeadersVisibility="Column">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="#00000000" />
<Setter Property="Height" Value="30" />
<Setter Property="Foreground" Value="DarkGray" />
<Setter Property="FontSize" Value="18" />
</Style>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="HorizontalAlignment" Value="Right" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#00000000" />
<Setter Property="Foreground" Value="DarkGray" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="#FF151515" />
<Setter Property="Height" Value="30" />
<Setter Property="Foreground" Value="DarkGray" />
<Setter Property="FontFamily" Value="Maven Pro" />
<Setter Property="FontSize" Value="28" />
<Setter Property="HorizontalAlignment" Value="Right" />
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="35" />
<DataGridTextColumn Header="Gender" Binding="{Binding Gender}" Width="100" />
<DataGridTextColumn Header="Age" Binding="{Binding Age}" Width="100" />
<DataGridTextColumn Header="Adress" Binding="{Binding Adress}" Width="100" />
</DataGrid.Columns>
</DataGrid>
</ControlTemplate>
</Window.Resources>
在其他一些地方,我想按如下方式使用该模板:
<DataGrid DataContext="{Binding PersonTable}" ItemsSource="{Binding PersonsFromCanada}" Template="{StaticResource PersonTableTemplate}" />
<DataGrid DataContext="{Binding PersonTable}" ItemsSource="{Binding PersonsFromMexiko}" Template="{StaticResource PersonTableTemplate}" />
但是不幸的是,这不起作用,因为表始终为空。
如果我将DataContext和ItemsSource直接放入模板中,就像这样...
<ControlTemplate x:Key="PersonTableTemplate" >
<DataGrid DataContext="{Binding PersonTable}" ItemsSource="{Binding PersonsFromCanada}" AutoGenerateColumns="False" Background="Transparent" RowBackground="Transparent" IsReadOnly="True" HeadersVisibility="Column">
...
...然后表不为空,但是(显然)总是具有相同的内容。
如何将不同的变量PersonsFromCanada和PersonsFromMexiko传递给模板?