我正在尝试开发一个包含TextBlock
的WPF控件。对于DataTemplate
,此控件将显示在ItemsControl
中。在此控件中,我希望默认情况下控件具有固定高度(假设为150以设置基线)。 TextBlock
将根据可用的像素数量修剪其内容。我还有一个“展开”按钮,我希望将该文本框扩展为所需的高度,以便在不进行任何修剪的情况下显示所有文本。
根据代码here,只要我的TextBlock高度不受约束,我就可以进行修剪检测。看来我可能不得不按照自定义控制路线覆盖Arrange
和Measure
,但我希望我能用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>
答案 0 :(得分:1)
答案由sa_ddam213提供。如果他用答案更新这个问题,我会将其标记为正确。基本上,高度为140的包含Grid
的高度设置为自动。