【问题标题】:Disable ScrollViewer VerticalScrollBarVisible if content fits如果内容适合,则禁用 ScrollViewer VerticalScrollBarVisible
【发布时间】:2014-04-13 14:23:26
【问题描述】:

我目前正在编写我的第一个 Windows Phone (8) 应用程序,这也是我的第一个 Xaml 应用程序。所以很可能我只是自己没有找到解决我的问题的方法,因为我不知道哪些词可以提供给谷歌。我试过了,但没有发现任何有用的东西。我找到了那个,但它没有帮助:

How to disable "scroll compression" in 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 Emulator WVGA 中测试)。

【问题讨论】:

    标签: wpf xaml windows-phone-8


    【解决方案1】:

    在 VS2013 中设置 VerticalScrollBarVisibility="Auto" 为我工作。

    【讨论】:

      【解决方案2】:

      尝试将此属性添加到您的ScrollViewer

      VerticalScrollMode="Auto"
      

      还可以尝试禁用 HorizontalScrollModeHorizontalScrollBarVisiblity 属性。

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

      【讨论】:

      • 感谢您的想法。我将在本周晚些时候尝试一下,然后我会发布我的答案。
      • 在VS2013中使用VerticalScrollMode报如下错误:成员“VerticalScrollMode”无法识别或无法访问。”
      【解决方案3】:

      您可以动态地将 SetVerticalScrollBarVisibility 设置为 Disabled,具体取决于您的 cs 代码中的 InfoText 长度...

      if(InfoText.Length() >n)
      {
          ScrollViewer.SetVerticalScrollBarVisibility(scrollViewer, ScrollBarVisibility.Auto);
      }
      else
      {
         ScrollViewer.SetVerticalScrollBarVisibility(scrollViewer, ScrollBarVisibility.Disabled);
      }
      

      【讨论】:

        【解决方案4】:

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

        在 xaml 中:

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

        在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 条件格式或其他东西。
        猜你喜欢
        • 2020-06-16
        • 1970-01-01
        • 1970-01-01
        • 2019-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        相关资源
        最近更新 更多