簡體   English   中英

如何在可視狀態下使用splitview的窗格在UWP中實現自適應效果?

[英]How to use splitview's pane in visualstate to achieve adaptive effect in UWP?

我在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'.'IsPaneOpen' was not found in type 'SplitView'.屬性'IsPaneOpen' was not found in type 'SplitView'. 我得到了飛機B,即使用OnPaneClosingOnPaneOpen類的事件,但是只有PaneClosing事件,沒有打開事件。 我想知道是否有人可以提出任何建議。

自適應觸發器使用MinWidthMinHeight來檢查觸發器條件。 它不檢查任何布爾條件。 您需要使用StateTrigger並結合IsPaneOpenIsActive觸發“PaneOpenState”。 但是,如果要觸發“ PaneClosedState”,則不能將其直接綁定到StateTrigger IsActive 您需要具有從StateTriggerBase類派生的其他一些狀態觸發器,例如這些令人敬畏的WindowsStateTriggers 我正在使用上述集合中的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 您可以使用類似NotTrueConverter的轉換器來對布爾值NotTrueConverter ,並使用StateTrigger在“ PaneClosedState”中使用StateTrigger

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM