上下文菜单不会打开
Context Menu will not open
我有一个 UWP 应用程序,目前我在 phone 和桌面上对其进行了测试。在该应用程序中,我在数据模板中定义了一个上下文菜单:
<DataTemplate x:Key="AccountTemplate">
<StackPanel HorizontalAlignment="Stretch"
Holding="AccountList_Holding"
RightTapped="AccountList_RightTapped">
<FlyoutBase.AttachedFlyout>
<MenuFlyout>
<MenuFlyoutItem x:Uid="Edit"
Text="Edit"
Click="Edit_OnClick" />
<MenuFlyoutItem x:Uid="Delete"
Text="Delete"
Click="Delete_OnClick" />
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
<StackPanel Margin="0,0,0, 12" >
<Grid HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Name}"
TextTrimming="CharacterEllipsis"
Style="{ThemeResource SubtitleTextBlockStyle}"/>
<TextBlock TextAlignment="Right"
Style="{ThemeResource SubtitleTextBlockStyle}"
Text="{Binding CurrentBalance, Converter={StaticResource AmountFormatConverter}}"
HorizontalAlignment="Right" />
</Grid>
<TextBlock Text="{Binding Iban}"
Style="{StaticResource DeemphasizedBodyTextBlockStyle}" />
</StackPanel>
</StackPanel>
</DataTemplate>
后面的代码中:
private void AccountList_Holding(object sender, HoldingRoutedEventArgs e)
{
var senderElement = sender as FrameworkElement;
var flyoutBase = FlyoutBase.GetAttachedFlyout(senderElement);
flyoutBase.ShowAt(senderElement);
}
private void AccountList_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
var senderElement = sender as FrameworkElement;
var flyoutBase = FlyoutBase.GetAttachedFlyout(senderElement);
flyoutBase.ShowAt(senderElement);
}
现在我注意到,尤其是在右键单击时,上下文菜单不会始终打开。经过一些尝试后,我发现我必须单击其中一个 TextBlocks 才能使其工作(当然其中必须有一些文本)。此外,如果直接单击 TextBlock,他似乎只会获取数据上下文。
当我点击列表项的任意位置时,如何实现它会触发并获取数据上下文?
您需要添加ItemContainerStyle
给您ListView
或GridView
。
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</GridView.ItemContainerStyle>
并且还将 StackPanel
的 Background
属性 设置为 Transparent
。
我有一个 UWP 应用程序,目前我在 phone 和桌面上对其进行了测试。在该应用程序中,我在数据模板中定义了一个上下文菜单:
<DataTemplate x:Key="AccountTemplate">
<StackPanel HorizontalAlignment="Stretch"
Holding="AccountList_Holding"
RightTapped="AccountList_RightTapped">
<FlyoutBase.AttachedFlyout>
<MenuFlyout>
<MenuFlyoutItem x:Uid="Edit"
Text="Edit"
Click="Edit_OnClick" />
<MenuFlyoutItem x:Uid="Delete"
Text="Delete"
Click="Delete_OnClick" />
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
<StackPanel Margin="0,0,0, 12" >
<Grid HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Name}"
TextTrimming="CharacterEllipsis"
Style="{ThemeResource SubtitleTextBlockStyle}"/>
<TextBlock TextAlignment="Right"
Style="{ThemeResource SubtitleTextBlockStyle}"
Text="{Binding CurrentBalance, Converter={StaticResource AmountFormatConverter}}"
HorizontalAlignment="Right" />
</Grid>
<TextBlock Text="{Binding Iban}"
Style="{StaticResource DeemphasizedBodyTextBlockStyle}" />
</StackPanel>
</StackPanel>
</DataTemplate>
后面的代码中:
private void AccountList_Holding(object sender, HoldingRoutedEventArgs e)
{
var senderElement = sender as FrameworkElement;
var flyoutBase = FlyoutBase.GetAttachedFlyout(senderElement);
flyoutBase.ShowAt(senderElement);
}
private void AccountList_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
var senderElement = sender as FrameworkElement;
var flyoutBase = FlyoutBase.GetAttachedFlyout(senderElement);
flyoutBase.ShowAt(senderElement);
}
现在我注意到,尤其是在右键单击时,上下文菜单不会始终打开。经过一些尝试后,我发现我必须单击其中一个 TextBlocks 才能使其工作(当然其中必须有一些文本)。此外,如果直接单击 TextBlock,他似乎只会获取数据上下文。
当我点击列表项的任意位置时,如何实现它会触发并获取数据上下文?
您需要添加ItemContainerStyle
给您ListView
或GridView
。
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</GridView.ItemContainerStyle>
并且还将 StackPanel
的 Background
属性 设置为 Transparent
。