我尝试根据MenuFlyout
添加/删除VisualStateManager
。
我有两个状态Touch
和NoTouch
。我想在名为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>
但是,一旦使用NoTouch
方法激活了StateManager.GoToState(...)
状态,这将引发COMException(E_FAIL)。另一个状态将设置“弹出”,但没有任何内容可以提供空菜单。
网格本身位于DataTemplate
的{{1}}内
我想念什么?
答案 0 :(得分:0)
基于VisualState禁用弹出按钮
Flyout
是延迟加载控制,无法使用VisualState
进行初始化,需要在xaml中的以前进行初始化。如果要基于VisualState
禁用Flyout
,则可以更改MenuFlyoutPresenter
样式以隐藏Flyout
,有关详细信息,请参考以下代码。
<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>