WPF绑定标签的可见性到滚动条的ComputedVerticalScrollBarVisibility

4

我有一个ScrollViewer,它只能垂直滚动,并且仅在需要时显示垂直滚动条:

<ScrollViewer x:Name="sv" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Auto">

我还有一个标签,只想在ScrollViewer的垂直滚动条显示时显示:

<Label Background="DarkBlue" Height="60" Width="70">
            <Label.Style>
                <Style TargetType="Label">
                    <Setter Property="Visibility" Value="Visible"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ComputedVerticalScrollBarVisibility.Visibility, ElementName=sv}" Value="Hidden">
                            <Setter Property="Visibility" Value="Hidden"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Label.Style>
</Label>

这似乎不起作用。我已经搜索了解决方案,通常我会很快找到,因此这是我的第一篇帖子。有没有建议如何使其工作?我更喜欢仅使用xaml的解决方案,但也可以考虑使用转换器等。

2个回答

7

首先,ComputedVerticalScrollBarVisibility 属性的类型是 Visibility。 因此,您只需要将其绑定到 ComputedVerticalScrollBarVisibility 属性,而不是 ComputedVerticalScrollBarVisibility.Visibility。

其次,Value 将会是 Collapsed,而不是 Hidden


将触发器更新为:

<DataTrigger Binding="{Binding ComputedVerticalScrollBarVisibility,
                               ElementName=sv}" Value="Collapsed">
    <Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>

1
这完全起作用了。非常感谢您。我希望其他人也会发现这很有用。 - CornishCoder

1
最简单的方法可能是直接将标签的可见性绑定到滚动条的计算可见性上:
<Label Background="DarkBlue" Height="60" Width="70"
       Visibility="{Binding ComputedVerticalScrollBarVisibility, ElementName=sv}" />

这样标签只在滚动条可见时才可见。您的示例使用的是“隐藏”而不是“折叠”。如果您只想隐藏标签而不是折叠它,可以使用转换器。

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