设计具有可扩展TextBlock的WPF控件

时间:2013-11-20 20:49:42

标签: c# wpf xaml textblock

我正在尝试开发一个包含TextBlock的WPF控件。对于DataTemplate,此控件将显示在ItemsControl中。在此控件中,我希望默认情况下控件具有固定高度(假设为150以设置基线)。 TextBlock将根据可用的像素数量修剪其内容。我还有一个“展开”按钮,我希望将该文本框扩展为所需的高度,以便在不进行任何修剪的情况下显示所有文本。

根据代码here,只要我的TextBlock高度不受约束,我就可以进行修剪检测。看来我可能不得不按照自定义控制路线覆盖ArrangeMeasure,但我希望我能用XAML来解决这个问题。

我的ViewModel将具有IsExpanded属性,ToggleTextExpansionCommand命令将在执行时切换。我不确定我应该在IsExpanded触发器上做什么,以使TextBlock扩展以占用它所需的所有空间。

我的DataTemplate现在看起来如下:

<DataTemplate>
    <Grid Height="140">
        <Grid.RowDefinitions>
            <!-- other rows exist -->
            <RowDefinition Height=*" /> <!-- textblock row -->
        </Grid>

        <!-- other content -->
        <TextBlock x:Name="MyTextBlock" Grid.Row="2" Text="{Binding MyText}" />

        <Button x:Name="ExpanderButton" Command="{Binding ToggleTextExpansionCommand}" Visibility="Collapsed" />
    </Grid>

    <DataTemplate.Triggers>
        <Trigger SourceName="MyTextBlock" Property="Controls:TextBlockServices.IsTextTrimmed" Value="True">
            <Setter TargetName="ExpanderButton" Property="Visibility" Value="Visible" />
        </Trigger>
        <DataTrigger Binding="{Binding IsExpanded}" Value="True">
            <!-- what do I do here?? -->
        </DataTrigger>
    </DataTemplate.Triggers />
</DataTemplate>

1 个答案:

答案 0 :(得分:1)

答案由sa_ddam213提供。如果他用答案更新这个问题,我会将其标记为正确。基本上,高度为140的包含Grid的高度设置为自动。