创建一个可调整大小(展开+折叠)的TextBlock控件

时间:2015-01-18 01:17:19

标签: c# xaml windows-runtime windows-phone-8.1 winrt-xaml

我试图创建一个带有两个TextBlock> s的控件,其中包含“显示更多”和“显示更多” “显示更少”功能。考虑初始阈值X,如果TextBlock的高度大于Threshdold,则TextBlock将调整为阈值的值(折叠直到达到该值)。再次单击,会将TextBlock展开为 MaxHeight="Auto"

这是我到目前为止所尝试的内容:

<StackPanel>
    <TextBlock x:Name="ResizeableTextBlock"
               Text="{Binding Description}" 
               TextWrapping="Wrap" MaxHeight="{Binding ResizeThreshold}"/>
    <TextBlock Text="{Binding ResizeLabel}" 
               Foreground="{StaticResource PhoneAccentBrush}"
               Tapped="OnResizeLabelTapped"/>
</StackPanel>

并且Tapped事件处理程序如下所示:

private void OnResizeLabelTapped(object sender, TappedRoutedEventArgs e)
{
    if (ResizeableTextBlock.ActualHeight > viewModel.ResizeThreshold)
    {
        ResizeableTextBlock.MaxHeight = ResizeThreshold;
        ResizeLabel = ShowLessLabel;
    }
    else if (ResizeableTextBlock.ActualHeight < viewModel.ResizeThreshold)
    {
        ResizeableTextBlock.ClearValue(MaxHeightProperty);
        ResizeLabel = ShowMoreLabel;
    }
}

此方法的问题在于,元素的ActualHeight很可能与最初分配给元素的Height略有不同。 例如,设置Height = 200,然后查询ActualHeight值会产生类似于201.00747494...的值,因为系统和布局都会进行所有计算。

关于更可靠方法的任何想法?

P.S。还有一个很好的属性MaxLines,它提供了我所需要的,但是使用这条路径并不是很有帮助,因为我仍然需要首先确定是否必须应用“Show More”或“show Less”。 .. MaxLines只是一个制定者,没有类似“CurrentLines”的吸气剂可供比较。

0 个答案:

没有答案