无法在WPF

时间:2019-04-23 13:43:58

标签: c# wpf wpf-controls

我正在使用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传递给模板?

0 个答案:

没有答案