簡體   English   中英

禁用基於VisualState的彈出

[英]Disable Flyout based on VisualState

我嘗試基於VisualStateManager添加/刪除MenuFlyout

我有兩種狀態TouchNoTouch 我想在名為rowGrid的網格上設置rowGrid 我嘗試了不同版本的VisualStates。 例如:

<VisualStateGroup x:Name="TouchGroup">
    <VisualState x:Name="Touch">
        <VisualState.Setters>
            <Setter Target="rowGrid.ContextFlyout">
                <Setter.Value>
                    <MenuFlyout >
                        <MenuFlyoutItem Text="Play" />
                    </MenuFlyout>
                </Setter.Value>
            </Setter>
        </VisualState.Setters>
    </VisualState>
    <VisualState x:Name="NoTouch">
        <VisualState.Setters>
            <Setter Target="rowGrid.ContextFlyout" Value="{x:Null}" />
        </VisualState.Setters>
    </VisualState>
</VisualStateGroup>

但是,一旦使用StateManager.GoToState(...)方法激活了NoTouch狀態,這將引發COMException(E_FAIL)。 另一個狀態將設置“彈出”,但是沒有任何內容可以提供空白菜單。

網格本身在ListViewDataTemplate內部

我想念什么?

禁用基於VisualState的彈出

Flyout是延遲加載控制,無法使用VisualState初始化,需要在xaml中進行初始化。 如果要基於VisualState禁用Flyout ,則可以更改隱藏FlyoutMenuFlyoutPresenter樣式,有關詳細信息,請參考以下代碼。

<Grid Background="Transparent" x:Name="rowGrid" >
    <Grid.ContextFlyout >
        <MenuFlyout x:Name="GridMenuFlyout" >
            <MenuFlyoutItem Text="Reset"/>
            <MenuFlyoutSeparator/>
            <ToggleMenuFlyoutItem Text="Repeat"/>
            <ToggleMenuFlyoutItem Text="Shuffle"/>
        </MenuFlyout>
    </Grid.ContextFlyout>

    <Grid.Resources>

        <Style TargetType="MenuFlyoutPresenter" x:Key="MenuFlyoutPresenterShowItem">
            <Setter Property="Visibility" Value="Visible"/>
        </Style>
        <Style TargetType="MenuFlyoutPresenter" x:Key="MenuFlyoutPresenterHideItem">
            <Setter Property="Visibility" Value="Collapsed"/>
        </Style>

    </Grid.Resources>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="TouchGroup">
            <VisualState x:Name="Touch">
                <VisualState.Setters>
                    <Setter Target="GridMenuFlyout.MenuFlyoutPresenterStyle" Value="{ThemeResource MenuFlyoutPresenterShowItem}"/>
                </VisualState.Setters>
            </VisualState>

            <VisualState x:Name="NoTouch">
                <VisualState.Setters>
                    <Setter Target="GridMenuFlyout.MenuFlyoutPresenterStyle" Value="{ThemeResource MenuFlyoutPresenterHideItem}"/>
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>

暫無
暫無

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

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