如何使XAML资源在控件之间可重用?

时间:2018-10-11 06:23:22

标签: c# wpf

我目前有以下代码:

<DataGrid x:Name="dgAppRevision" Margin="0,50,0,0" AutoGenerateColumns="False" IsReadOnly="True"
            HorizontalContentAlignment="Right" MouseDoubleClick="dgdc"  RowStyle="{StaticResource appStyle}"  Grid.Row="1">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Python">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Image x:Name="checkImage" Width="30" Height="30" Source="pack://application:,,,/ProjectTracker;component/Icons/GreenCheck.png" />
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding Path=python_done}" Value="False">
                                <Setter Property="Source" Value="pack://application:,,,/ProjectTracker;component/Icons/RedX.png" TargetName="checkImage"/>
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn Header="C#">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Image x:Name="checkImage" Width="30" Height="30" Source="pack://application:,,,/ProjectTracker;component/Icons/GreenCheck.png" />
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding Path=cs_done}" Value="False">
                                <Setter Property="Source" Value="pack://application:,,,/ProjectTracker;component/Icons/RedX.png" TargetName="checkImage"/>
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
    </DataGrid>

我的UserControl当前大约有5个表,这些表具有不同的列,除了这两列之外,它们很难阅读且难以编辑。有什么办法可以使这些列可重用,以便我可以只用

<DataGrid>
    <DataGrid.Columns>
        </resusedCollumns>
        <!-- Other Columns -->
    </DataGrid.Columns>
</DataGrid>

1 个答案:

答案 0 :(得分:1)

无法通过资源访问列,请参见WPF DataGrid Columns in Style or resource

您可以做的是在资源中提供DataGridTemplateColumn的模板。

<DataTemplate x:Key="GreenCheckColumnTemplate">
        <Image x:Name="checkImage" Width="30" Height="30" 
               Source="pack://application:,,,/ProjectTracker;component/Icons/GreenCheck.png" />
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Path=python_done}" Value="False">
                    <Setter Property="Source" Value="pack://application:,,,/ProjectTracker;component/Icons/RedX.png" 
    TargetName="checkImage"/>
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>

并使用:

进行访问
<DataGrid>
    <DataGrid.Columns>
       <DataGridTemplateColumn Header="Python" 
                               CellTemplate="{StaticResource GreenCheckColumnTemplate}" />

编辑

除非我完全错了。我正在浏览我当前的项目,发现我已经完成了,但是我说的无法完成。

<Window.Resources>

        <DataGridTemplateColumn x:Key="GreenCheckColumn" Header="Python">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>

                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

    </Window.Resources>
    <Grid>
        <DataGrid>
            <DataGrid.Columns>
                <StaticResource ResourceKey="GreenCheckColumn" />

            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>