我在StackPanel中有一些导航按钮,我想将它们放在splitview的窗格中。当splitview的窗格打开时,堆栈面板的方向是水平的,当窗格关闭时,堆栈面板的方向是垂直的,这样用户总是能够看到导航按钮。 XAML代码如下
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="PaneViewStates">
<VisualState x:Name="PaneClosedState">
<VisualState.StateTriggers>
<StateTrigger IsActive="{Binding Path=IsPaneOpen, ElementName=SplitView, Converter={StaticResource BooleanNegationConverter}}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="NavigationControl.RootGrid.StackPanel.Orientation" Value="Vertical"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="PaneOpenState">
<VisualState.StateTriggers>
<StateTrigger IsActive="{Binding Path=IsPaneOpen, ElementName=SplitView}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="NavigationControl.RootGrid.StackPanel.Orientation" Value="Horizontal"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
但是我收到了像可附加属性'IsPaneOpen' was not found in type 'SplitView'.
这样的错误
我得到了平面B,即使用OnPaneClosing
和OnPaneOpen
等事件,但是只有PaneClosing
事件,没有开放事件。我想知道是否有人可以提出任何建议。
答案 0 :(得分:1)
自适应触发器使用MinWidth
和MinHeight
来检查触发条件。它不会检查任何布尔条件。您需要使用StateTrigger
并将IsPaneOpen
绑定到IsActive
以触发&#34; PaneOpenState&#34;。但是,如果您想触发&#34; PaneClosedState&#34;,则无法直接将其绑定到IsActive
的{{1}}。你需要有一些从StateTriggerBase类派生的其他状态触发器,就像这些令人敬畏的WindowsStateTriggers一样。我正在使用上述集合中的StateTrigger
。
代码应该是:
IsFalseStateTrigger
修改强>
在我们的一位朋友指出之后,我发现我忘记了最明显的方法,而不是使用<Page ...
xmlns:triggers="using:WindowsStateTriggers">
...
<VisualState x:Name="PaneOpenState">
<VisualState.StateTriggers>
<StateTrigger IsActive="{Binding IsPaneOpen, ElementName=MySplit}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="NavigationControl.RootGrid.StackPanel.Orientation" Value="Horizontal"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="PaneClosedState">
<VisualState.StateTriggers>
<triggers:IsFalseStateTrigger Value="{Binding ElementName=MySplit, Path=IsPaneOpen}" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="NavigationControl.RootGrid.StackPanel.Orientation" Value="Vertical"/>
</VisualState.Setters>
</VisualState>
。您可以使用像IsFalseStateTrigger
这样的转换器来否定布尔值并在&#34; PaneClosedState&#34;中使用它。使用NotTrueConverter