如果内容适合,则禁用 ScrollViewer 的垂直滚动条可见性

6
我正在编写我的第一个 Windows Phone (8) 应用程序,同时也是我的第一个 Xaml 应用程序。所以很可能是因为我不知道该输入哪些关键词在谷歌上搜索,所以自己找不到解决方法。虽然我已经尝试过了,但是没有找到有用的信息。我发现了这个链接,但它对我没有帮助: 如何禁用 ScrollViewer 中的“滚动压缩” 这里是我 XAML 中重要的部分:
<ScrollViewer VerticalScrollBarVisibility="Auto">
    <StackPanel VerticalAlignment="Top">
         <TextBlock x:Name="InfoText" TextWrapping="Wrap" VerticalAlignment="Top" Text="VersionInfoText"/>
    </StackPanel>
</ScrollViewer>

我将以编程为主题更改TextBlock InfoText的内容。文本可能足够短,可以完全适应,也可能相当长。这就是为什么我将其嵌入到ScrollViewer中的原因。(顺便说一下,稍后将添加其他控件到StackPanel中。)
如果ScrollViewer无法滚动,则会产生这些“过度反弹”效果。如果文本很大,那很好,但是当没有可滚动的内容时,我不希望出现此效果。
我尝试了VerticelScrollBarVisibility =“Disable”,它成功地禁用了该效果。现在我的问题是:
根据我的StackPanel的高度和ScrollViewer的高度,我是否可以通过XAML-Magic自动切换AutoDisable
我希望Auto能起作用,但它没有(在VS2013模拟器WVGA中测试)。
4个回答

17

在VS2013中,设置VerticalScrollBarVisibility="Auto"对我起作用了。


4
请将此属性添加到您的ScrollViewer中。
VerticalScrollMode="Auto"

同时尝试禁用HorizontalScrollModeHorizontalScrollBarVisiblity属性。

如果这不起作用,请告诉我。然后我将制作一个示例应用程序,看看是否可以为您解决问题。现在我只是猜测。试试吧。


谢谢你的建议。我会在本周晚些时候尝试,并发布我的答案。 - Knowleech
1
在VS2013中使用VerticalScrollMode会报以下错误:“成员“VerticalScrollMode”未被识别或无法访问。” - Brett

0
你可以根据你的cs代码中InfoText的长度动态设置SetVerticalScrollBarVisibility为禁用。
if(InfoText.Length() >n)
{
    ScrollViewer.SetVerticalScrollBarVisibility(scrollViewer, ScrollBarVisibility.Auto);
}
else
{
   ScrollViewer.SetVerticalScrollBarVisibility(scrollViewer, ScrollBarVisibility.Disabled);
}

0

您可以检查TextBlock的高度是否大于ScrollViewerheight

XAML代码:

        <ScrollViewer x:Name="TestScrollViewer">

            <TextBlock x:Name="InfoText"
                       Text="Information"
                       TextWrapping="Wrap"
                       VerticalAlignment="Top" />

        </ScrollViewer>

In cs:

    public MainPage()
    {
        InitializeComponent();

        Loaded += (sender, args) =>
        {
            TestScrollViewer.IsEnabled = InfoText.ActualHeight > TestScrollViewer.ActualHeight;

            // OR

            TestScrollViewer.VerticalScrollBarVisibility = InfoText.ActualHeight > TestScrollViewer.ActualHeight
                ? ScrollBarVisibility.Visible
                : ScrollBarVisibility.Disabled;
        };
    }

好的。那么这是一个代码后台解决方案。是否可能完全使用XAML来构建类似的东西?我之前看到过一些带有条件格式或其他奇怪XAML的内容。 - Knowleech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接