对不起我的英语。
我需要为ListBox中的项更改DataTemplate,具体取决于Vertical ScrollBar是否可见(或启用或禁用)。 我使用ListBox和ScrollBar的样式。 当其属性“IsEnabled”的值为“False”时,我可以更改scrollBar模板。但我无法理解如何在ListBox Style中捕获ScrollBar.VisibilityChanging。我试着用
<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>
......
这不起作用。
我希望你帮助我
答案 0 :(得分:2)
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上定义的所有属性。