首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF - DataGridTemplate与DataTemplate.Triggers

WPF - DataGridTemplate与DataTemplate.Triggers
EN

Stack Overflow用户
提问于 2018-03-06 10:19:31
回答 2查看 1.3K关注 0票数 0

我需要在一列中获得不同类型的行,所以我尝试在触发器中使用DataGridTemplate。我给Class = {Value = "Something", Type = "comboBox"}发了信,但comboBox1没有出现。

代码语言:javascript
复制
    <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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-06 10:35:59

combobox模板列不正确,这很好:

代码语言:javascript
复制
<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>

此操作正常,请将触发器绑定值更改为“类型”。我使用了地址值--例如,您使用了您的值。

票数 1
EN

Stack Overflow用户

发布于 2018-03-06 11:32:46

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

代码语言:javascript
复制
    <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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49128424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档