Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使独立的滚动条自动可见,取决于它控制的scrollviewer?_.net_Wpf_Xaml_Scrollbar_Scrollviewer - Fatal编程技术网

.net 如何使独立的滚动条自动可见,取决于它控制的scrollviewer?

.net 如何使独立的滚动条自动可见,取决于它控制的scrollviewer?,.net,wpf,xaml,scrollbar,scrollviewer,.net,Wpf,Xaml,Scrollbar,Scrollviewer,我有一个scrollviewer,其中隐藏了HorizontalScrollbarVisibility,因为我希望将实际的滚动条放置在UI的其他位置 不要担心最佳或不好的做法,只要相信我,这是显示滚动条的最佳方式(原因之一是我实际上滚动了2个同步视图,这很好,不是问题的一部分) 目前我的代码如下所示: <ScrollViewer Name="scrollView" HorizontalScrollBarVisibility="Hidden"> ... </ScrollViewe

我有一个scrollviewer,其中隐藏了HorizontalScrollbarVisibility,因为我希望将实际的滚动条放置在UI的其他位置

不要担心最佳或不好的做法,只要相信我,这是显示滚动条的最佳方式(原因之一是我实际上滚动了2个同步视图,这很好,不是问题的一部分)

目前我的代码如下所示:

<ScrollViewer Name="scrollView" HorizontalScrollBarVisibility="Hidden">
...
</ScrollViewer>
...
<ControlsWPF:BindableScrollBar Orientation="Horizontal" BoundScrollViewer="{Binding ElementName=scrollView}"/>

...
...
bdBurabestRooBar刚刚从正常的WPF滚动条控件继承,所以考虑它。 (它来自于这里找到的一段伟大的代码:)

现在,我的问题是独立的滚动条总是可见的。我希望它在scrollviewer上将HorizontalScrollBarVisibility设置为“自动”时的行为。它应该只有在需要滚动条时才可见,否则应该折叠


如果有人知道如何解决这个问题(最好只使用XAML),我们将不胜感激。

使用ScrollViewer上的Computed[垂直|水平]ScrollBarVisibility属性:

<ControlsWPF:BindableScrollBar Orientation="Horizontal" BoundScrollViewer="{Binding ElementName=scrollView}" Visibility="{Binding ComputedHorizontalScrollBarVisibility, ElementName=scrollView}"/>

看这里:@GinoBambino,我想你误解了我的问题。这个链接正是我在帖子中提到的。我已经去过那里,并且已经做到了,现在我还需要绑定可见性。简单地将滚动条的可见性绑定到相关scrollviewer的“ScrollBarVisibility”属性怎么样?这对你来说够了吗?您可以编写一个简单的值转换器,将ScrollBarVisibility的值转换为相应的Visibility值。不幸的是,ScrollViewer ScrollBarVisibility将始终隐藏。很抱歉,我忘了提到我已经查看了ComputedHorizontalScrollBarVisibility。它不起作用,因为ScrollViewer滚动条始终是隐藏的-这就是为什么我使用独立的滚动条。您可以从ScrollViewer的样式中删除滚动条,并将水平滚动条的可见性保持为“自动”。另一个解决方案是自己计算它,但你需要监听大量ScrollViewer的事件。这听起来是个不错的主意——从样式中删除它,并按照你最初的建议绑定。我从未尝试过更改控件ControlTemplate的一部分,通过任何更改,您对如何实现这一点有任何线索吗?我添加了一个没有滚动条的ScrollViewer模板示例。实际上,只需删除它们,ScrollViewer仍然可以正常工作。
<ControlTemplate x:Key="NoBarsScrollViewerControlTemplate" TargetType="{x:Type ScrollViewer}">
    <Grid x:Name="Grid" Background="{TemplateBinding Background}">
        <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="0" Margin="{TemplateBinding Padding}" Grid.Row="0"/>
    </Grid>
</ControlTemplate>
bool ScrollBarVisibility = ScrollViewer.ExtentWidth > ScrollViewer.ViewportWidth;