如何在 windows 通用应用程序中单击图像时从左侧显示菜单?
How to show menu from left on image click in windows Universal apps?
我目前正在研究 Windows 通用 Apps.In,当用户单击菜单图标时,需要从左侧显示菜单。我想在其中添加一个 ListView 并根据用户选择的项目处理 selectionchanged 事件。现在,Flyout 的问题是它在单击图标时像弹出窗口一样打开,但我真正想要做的是 它应该来自 window 的左侧。对于例如在 android 的 Gmail 应用程序中。请任何人都可以建议如何实现这一目标。请在下方找到我在弹出窗口中添加的代码:
<Image Source="ms-appx:///Images/menu_image.png"
HorizontalAlignment="Left"
Tapped="Image_Tapped"
Width="60"
Height="90"
Grid.Column="0"
VerticalAlignment="Center">
<FlyoutBase.AttachedFlyout>
<Flyout>
<Grid x:Name="SettingsPane"
Background="{StaticResource AppBackGroundColor}"
Grid.Row="0"
Width="380">
<Grid.ChildrenTransitions>
<TransitionCollection>
<EdgeUIThemeTransition/>
</TransitionCollection>
</Grid.ChildrenTransitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
Margin="8">
<TextBlock Name="SidebarTitletxtblk"
FontSize="25"
TextWrapping="Wrap"
Style="{StaticResource BaseTextBlockStyle}" />
</StackPanel>
<ListView Grid.Row="1"
x:Name="LocationPickerList"
SelectionChanged="LocationPickTypeSelected"
Margin="0,10,0,0"
ItemContainerStyle="{StaticResource GenericListViewContainerStyle}"
ItemTemplate="{StaticResource LocationPickerListItemTemplate}"></ListView>
</Grid>
</Flyout>
</FlyoutBase.AttachedFlyout>
</Image>
您不能覆盖 Flyout 的标准过渡。如果您想应用其他内容,则可以改用 Popup 并根据需要对其进行自定义。要让它从左侧滑入,请应用 Edge=Left 的 EdgeUIThemeTransition(如果它很短)或 PaneThemeTransition(如果它是全高)。
例如:
<Popup x:Name="flyoutPane" IsOpen="False" IsLightDismissEnabled="True"
Width="320" HorizontalAlignment="Left">
<Popup.ChildTransitions>
<TransitionCollection>
<!--<EdgeUIThemeTransition Edge="Left" />-->
<PaneThemeTransition Edge="Left" />
</TransitionCollection>
</Popup.ChildTransitions>
<Grid Width="380" Height="{Binding ElementName=flyoutPane, Path=Height}" Background="{ThemeResource FlyoutBackgroundThemeBrush}" >
<TextBlock Text="Grid contents here" />
</Grid>
</Popup>
并通过您的按钮点击触发它(您的图像听起来应该是一个按钮而不是使用点击,除非您有备用键盘方法 - 您可以在保持按钮语义的同时模板化按钮外观)。
private void Button_Click(object sender, RoutedEventArgs e)
{
// Height is only important if we want the Popup sized to the screen
flyoutPane.Height = Window.Current.Bounds.Height;
flyoutPane.IsOpen = true;
}
如果您要执行其中的许多操作,则可以创建一个带有附加 属性 的自定义控件,类似于 FlyoutBase.AttachedFlyout。
我目前正在研究 Windows 通用 Apps.In,当用户单击菜单图标时,需要从左侧显示菜单。我想在其中添加一个 ListView 并根据用户选择的项目处理 selectionchanged 事件。现在,Flyout 的问题是它在单击图标时像弹出窗口一样打开,但我真正想要做的是 它应该来自 window 的左侧。对于例如在 android 的 Gmail 应用程序中。请任何人都可以建议如何实现这一目标。请在下方找到我在弹出窗口中添加的代码:
<Image Source="ms-appx:///Images/menu_image.png"
HorizontalAlignment="Left"
Tapped="Image_Tapped"
Width="60"
Height="90"
Grid.Column="0"
VerticalAlignment="Center">
<FlyoutBase.AttachedFlyout>
<Flyout>
<Grid x:Name="SettingsPane"
Background="{StaticResource AppBackGroundColor}"
Grid.Row="0"
Width="380">
<Grid.ChildrenTransitions>
<TransitionCollection>
<EdgeUIThemeTransition/>
</TransitionCollection>
</Grid.ChildrenTransitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
Margin="8">
<TextBlock Name="SidebarTitletxtblk"
FontSize="25"
TextWrapping="Wrap"
Style="{StaticResource BaseTextBlockStyle}" />
</StackPanel>
<ListView Grid.Row="1"
x:Name="LocationPickerList"
SelectionChanged="LocationPickTypeSelected"
Margin="0,10,0,0"
ItemContainerStyle="{StaticResource GenericListViewContainerStyle}"
ItemTemplate="{StaticResource LocationPickerListItemTemplate}"></ListView>
</Grid>
</Flyout>
</FlyoutBase.AttachedFlyout>
</Image>
您不能覆盖 Flyout 的标准过渡。如果您想应用其他内容,则可以改用 Popup 并根据需要对其进行自定义。要让它从左侧滑入,请应用 Edge=Left 的 EdgeUIThemeTransition(如果它很短)或 PaneThemeTransition(如果它是全高)。
例如:
<Popup x:Name="flyoutPane" IsOpen="False" IsLightDismissEnabled="True"
Width="320" HorizontalAlignment="Left">
<Popup.ChildTransitions>
<TransitionCollection>
<!--<EdgeUIThemeTransition Edge="Left" />-->
<PaneThemeTransition Edge="Left" />
</TransitionCollection>
</Popup.ChildTransitions>
<Grid Width="380" Height="{Binding ElementName=flyoutPane, Path=Height}" Background="{ThemeResource FlyoutBackgroundThemeBrush}" >
<TextBlock Text="Grid contents here" />
</Grid>
</Popup>
并通过您的按钮点击触发它(您的图像听起来应该是一个按钮而不是使用点击,除非您有备用键盘方法 - 您可以在保持按钮语义的同时模板化按钮外观)。
private void Button_Click(object sender, RoutedEventArgs e)
{
// Height is only important if we want the Popup sized to the screen
flyoutPane.Height = Window.Current.Bounds.Height;
flyoutPane.IsOpen = true;
}
如果您要执行其中的许多操作,则可以创建一个带有附加 属性 的自定义控件,类似于 FlyoutBase.AttachedFlyout。