【问题标题】:How to make an XAML resource be reusable across controls?如何使 XAML 资源可跨控件重用?
【发布时间】:2018-10-11 06:23:22
【问题描述】:

我目前有以下代码:

<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>

【问题讨论】:

    标签: c# wpf


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多