【发布时间】:2016-12-09 05:42:33
【问题描述】:
我正在编写一个 UWP 应用程序。
我在页面中添加了 SplitView(用于汉堡包)。
在SplitView Pane中,我有两个项目:
- SellButtonGrid
- SellButtonGridAlternate
以上两项的可见性取决于两个条件:
- 至少 520 个窗口高度
- SplitViewPane 打开或关闭。
这意味着 4 个案例:
- 窗口高度小于 520 且拆分视图已关闭
窗口高度小于 520 且 splitviewpane 已打开
窗口高度大于 520 且 splitviewpane 关闭
- 窗口高度大于 520 且 splitviewpane 已打开
对于 splitview 打开或关闭我使用:
<VisualState x:Name="SplitViewOpen">
<VisualState.StateTriggers>
<StateTrigger IsActive="{Binding ElementName=LayoutSplitView,
Path=IsPaneOpen}" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SellButtonGrid.Visibility" Value="Visible" />
<Setter Target="SellButtonGridAlternate.Visibility" Value="Collapsed" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="SplitViewClosed">
<VisualState.StateTriggers>
<StateTrigger IsActive="{Binding ElementName=LayoutSplitView,
Path=IsPaneOpen, Converter={StaticResource BooleanNegationConverter}}" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SellButtonGrid.Visibility" Value="Collapsed" />
<Setter Target="SellButtonGridAlternate.Visibility" Value="Visible" />
</VisualState.Setters>
</VisualState>
为了检测低于或高于 520 的高度,我使用:
<VisualState x:Name="SmallHeight">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SellButtonGrid.Visibility" Value="Collapsed" />
<Setter Target="SellButtonGridAlternate.Visibility" Value="Visible" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="LargeHeight">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="520" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SellButtonGrid.Visibility" Value="Visible" />
<Setter Target="SellButtonGridAlternate.Visibility" Value="Collapsed" />
</VisualState.Setters>
</VisualState>
但是,结果不是我所期望的。 如何合并这些视觉状态??
我尝试使用: http://dotnetbyexample.blogspot.in/2016/02/an-adaptivetrigger-that-works-with.html
我使用了上述解决方案,所以: 我重新编写的代码:
xmlns:Utils="using:DellApp.Utils"
xmlns:converters="using:DellApp.Converters"
xmlns:windowsStateTriggers="using:WindowsStateTriggers"
新创建的状态:
<VisualState.StateTriggers>
<windowsStateTriggers:CompositeStateTrigger>
<Utils:AdaptiveTrigger MinWindowHeight="520" MaxWindowHeight="18000" />
<StateTrigger IsActive="{Binding ElementName=LayoutSplitView,
Path=IsPaneOpen,
Converter={StaticResource BooleanNegationConverter}}" />
</windowsStateTriggers:CompositeStateTrigger>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SellButtonGrid.Visibility" Value="Collapsed" />
<Setter Target="SellButtonGridAlternate.Visibility" Value="Visible" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="SplitViewCollapsed_SmallHeight">
<VisualState.StateTriggers>
<windowsStateTriggers:CompositeStateTrigger>
<Utils:AdaptiveTrigger MaxWindowHeight="519"
MinWindowHeight="0" />
<StateTrigger IsActive="{Binding ElementName=LayoutSplitView,
Path=IsPaneOpen,
Converter={StaticResource BooleanNegationConverter}}" />
</windowsStateTriggers:CompositeStateTrigger>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SellButtonGrid.Visibility" Value="Collapsed" />
<Setter Target="SellButtonGridAlternate.Visibility" Value="Visible" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="SplitViewOpen_SmallHeight">
<VisualState.StateTriggers>
<windowsStateTriggers:CompositeStateTrigger>
<Utils:AdaptiveTrigger MaxWindowHeight="519"
MinWindowHeight="0" />
<StateTrigger IsActive="{Binding ElementName=LayoutSplitView,
Path=IsPaneOpen}" />
</windowsStateTriggers:CompositeStateTrigger>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SellButtonGrid.Visibility" Value="Collapsed" />
<Setter Target="SellButtonGridAlternate.Visibility" Value="Visible" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="SplitViewOpen_LargeHeight">
<VisualState.StateTriggers>
<windowsStateTriggers:CompositeStateTrigger>
<Utils:AdaptiveTrigger MinWindowHeight="520" MaxWindowHeight="18000"/>
<StateTrigger IsActive="{Binding ElementName=LayoutSplitView,
Path=IsPaneOpen}" />
</windowsStateTriggers:CompositeStateTrigger>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SellButtonGrid.Visibility" Value="Visible" />
<Setter Target="SellButtonGridAlternate.Visibility" Value="Collapsed" />
</VisualState.Setters>
</VisualState>
所以,我所做的是,我添加了CompositeStateTrigger from WindowsStateTriggers,但我无法触发它。
【问题讨论】:
标签: c# xaml windows-phone-8.1 uwp windows-10-universal