将展开/折叠按钮添加到DataGrid单元格

时间:2013-08-28 21:17:27

标签: .net wpf xaml datagrid triggers

以下是我的想法:我需要在DataGridTemplateColumn中使用展开/折叠按钮,以允许用户展开单元格以查看完整内容,或将其折叠为仅查看第一行。这是我的模板:

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <Grid HorizontalAlignment="Stretch" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <local:ExpandCollapseButton />
            <TextBlock x:Name="MyTB" Text="{Binding Body}" Grid.Column="1" TextTrimming="WordEllipsis" />
        </Grid>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

ExpandCollapseButton是一个简单的UserControl,可在点击时在+和 - 图标之间切换。它有一个名为bool的读/写IsExpanded属性。

我现在正在尝试添加一个简单的TriggerExpandCollapseButton的触发器,只需将TextBlock的{​​{1}}属性设置为TextTrimming处于折叠状态并在展开状态下将其设置为WordEllipsis,但无法找到正确的方法。我尝试在上面的扩展控件下添加以下代码:

None

但这会导致错误<local:ExpandCollapseButton.Triggers> <Trigger Property="IsExpanded" Value="True"> <Setter TargetName="MyTB" Property="TextTrimming" Value="None" /> </Trigger> </local:ExpandCollapseButton.Triggers> ,我无法理解。

1 个答案:

答案 0 :(得分:3)

使用带有SourceName和TargetName的DataTemplate触发器:

<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
    <Grid HorizontalAlignment="Stretch" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <local:ExpandCollapseButton x:Name="MyButton"/>
        <TextBlock x:Name="MyTB" Text="{Binding Body}" Grid.Column="1" TextTrimming="WordEllipsis" />
    </Grid>
     <DataTemplate.Triggers>
            <Trigger Property="IsExpanded" Value="True" SourceName="MyButton">
                <Setter Property="TextBlock.TextTrimming" Value="None" TargetName="MyTB"/>
            </Trigger>
        </DataTemplate.Triggers>
</DataTemplate>

由于