WPF:根据滚动条是否可见来更改ListBox ItemTemplate



我很抱歉我的英语。


我需要根据垂直滚动条是否可见(或启用或禁用)来更改ListBox中项目的DataTemplate。我为列表框和滚动条使用样式。我可以改变scrollBar模板时,它的属性"IsEnabled"有值"False"。但我不明白如何捕捉滚动条。可见度改变内部列表框样式。我试着用

<Style TargetType="{x:Type ListBox}" >
.....
<Style.Triggers>
    <Trigger Property="ScrollViewer.ComputedVerticalScrollBarVisibility"
             Value="Hidden">
        <Setter Property="ItemTemplate">
            ......
与…

<Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}">
     ..........
     <Trigger Property="IsEnabled" Value="False">
          <Setter Property="Visibility" Value="Hidden" />
     </Trigger>
 ......

这不是工作。

我希望你能帮助我

ScrollViewer有两个属性:ComputedHorizontalScrollBarVisibility和ComputedVerticalScrollBarVisibility是只读依赖属性,我们可以在ListBox的ControlTemplate中的触发器中使用它们(这里我只考虑垂直属性)

<Style x:Key="StyleListBoxChangingItemTemplate" TargetType="{x:Type ListBox}">
    <Setter Property="ItemTemplate" Value="{StaticResource SomeItemTemplate}"/>
    <Setter Property="Template">
        <ControlTemplate TargetType="{x:Type ListBox}">
            <ScrollViewer x:Name="ListScroller">
                <ItemsPresenter />
            </ScrollViewer>
            <ControlTemplate.Triggers>
                <Trigger SourceName="ListScroller" Property="ComputedVerticalScrollBarVisibility" Value="Visible">
                    <Setter Property="ItemTemplate" Value="{StaticResource SomeOtherItemTemplate}"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter>
</Style>

注意:为了答案的清晰性,这是一个精简的、最基本的ListBox模板。我删除了应该环绕ScrollViewer的边框和ScrollViewer上定义的所有属性。

相关内容

  • 没有找到相关文章

最新更新