WPF将标签的可见性绑定到ScrollViewer的ComputedVerticalScrollBarVisibility

时间:2014-07-24 19:37:45

标签: wpf binding scrollviewer

我有一个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 个答案:

答案 0 :(得分:5)

第一个 ComputedVerticalScrollBarVisibility 属性的类型为 Visibility 。  因此,您必须仅与ComputedVerticalScrollBarVisibility属性绑定,而不是与ComputedVerticalScrollBarVisibility.Visibility绑定。

其次, Value Collapsed 而非 Hidden


更新触发器:

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

答案 1 :(得分:0)

最简单的方法可能是将标签的可见性直接绑定到滚动条的计算可见性:

<Label Background="DarkBlue" Height="60" Width="70"
       Visibility="{Binding ComputedVerticalScrollBarVisibility, ElementName=sv}" />

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