WPF - DataGridTemplate与DataTemplate.Triggers

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF - DataGridTemplate与DataTemplate.Triggers相关的知识,希望对你有一定的参考价值。

我需要在一列中获得不同类型的行,所以我试图将DataGridTemplate与触发器一起使用。我发送Class = {Value = "Something", Type = "comboBox"}comboBox1没有显示。

    <DataGridTemplateColumn Header="Value" Width="*">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Value}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
        <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Type}" Value="comboBox">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <ComboBox Height="22" Name="comboBox1">
                                    <ComboBoxItem Content="X"/>
                                    <ComboBoxItem Content="Y"/>
                                    <ComboBoxItem Content="Z"/>
                                </ComboBox>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>
答案

组合框模板列不正确,这很好用:

<DataGrid Name="dg" Width="400" Height="300" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}"/>
            <DataGridTemplateColumn Header="Value" Width="*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Name="textbox1" Text="{Binding Address}">
                                <TextBlock.Style>
                                    <Style TargetType="{x:Type TextBlock}">
                                        <Setter Property="Visibility" Value="Hidden"/>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Address}" Value="Pune">
                                                <Setter Property="Visibility" Value="Visible"/>
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding Address}" Value="Mumbai">
                                                <Setter Property="Visibility" Value="Hidden"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </TextBlock.Style>
                            </TextBlock>
                            <ComboBox Height="22" Name="comboBox1">
                                <ComboBoxItem Content="X"/>
                                <ComboBoxItem Content="Y"/>
                                <ComboBoxItem Content="Z"/>
                                <ComboBox.Style>
                                    <Style TargetType="{x:Type ComboBox}">
                                        <Setter Property="Visibility" Value="Hidden"/>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Address}" Value="Mumbai">
                                                <Setter Property="Visibility" Value="Visible"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </ComboBox.Style>
                            </ComboBox>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
</DataGrid>

这是有效的,请将触发器绑定值更改为您的类型。我使用了地址值,例如,你使用你的值。

另一答案

DataTemplate移动到Style以某种方式解决了我的问题,但它仍然没有按预期工作。

    <DataGridTemplateColumn.CellStyle>
        <Style TargetType="ContentControl">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Type}" Value="comboBox">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <ComboBox Height="22" Name="comboBox1">
                                    <ComboBoxItem Content="X"/>
                                    <ComboBoxItem Content="Y"/>
                                    <ComboBoxItem Content="Z"/>
                                </ComboBox>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>                                
        </Style>
    </DataGridTemplateColumn.CellStyle>

以上是关于WPF - DataGridTemplate与DataTemplate.Triggers的主要内容,如果未能解决你的问题,请参考以下文章

WPF 多重绑定 .Net Framework 4.0

WPF Datagrid 模板列编辑事件和交替列颜色

2022-02-22 WPF上位机 124-OPC协议DA通信之McProtocol

2022-02-22 WPF上位机 123-OPC协议

WPF如何在数据网格中填充组合框

wpf在xaml里做动画(移动),如何设定相对已知值的From起始值