右键单击按钮会使AppBar膨胀而不是触发右键单击事件

时间:2017-02-24 18:08:50

标签: c# windows xaml uwp

所以我的AppBar中有一个按钮,它将按钮添加到位于页面网格中的堆栈面板上。 我将RightTapped事件分配给了新按钮。 但是,当我右键单击一个新按钮,而不是触发我分配给RightTapped事件的方法时,该程序会使AppBar膨胀。 我试图设置IsRightTapEnabled =" False"除了新按钮之外,每个项目都有一个,但这并没有帮助解决问题。 我被困了,我需要帮助。

这是我背后的代码:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }
    int index = 0;

    private void AppBarButton_Click(object sender, RoutedEventArgs e)
    {
        index++;
        string ButtonName = "Button" + index;
        Button dummyButton = new Button
        {
            Name = ButtonName,
            Content = ButtonName,
        };
        StackPanel1.Children.Add(dummyButton);
        dummyButton.RightTapped += new RightTappedEventHandler(DummyButton_RightTapped);
    }

    private void Button0_RightTapped(object sender, RightTappedRoutedEventArgs e)
    {
        MenuFlyout myFlyout = new MenuFlyout();
        MenuFlyoutItem firstItem = new MenuFlyoutItem { Text = "Right Clicked" };

        myFlyout.Items.Add(firstItem);
        myFlyout.ShowAt(sender as FrameworkElement);
    }

    private void DummyButton_RightTapped(object sender, RightTappedRoutedEventArgs e)
    {
        //var dialog = new MessageDialog("Right clicked");
        //await dialog.ShowAsync();

        MenuFlyout myFlyout = new MenuFlyout();
        MenuFlyoutItem firstItem = new MenuFlyoutItem { Text = "Right Clicked" };

        myFlyout.Items.Add(firstItem);
        myFlyout.ShowAt(sender as FrameworkElement);
    }
}

这是我的XAML代码:

<Page
x:Class="Soundboard.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Soundboard"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
IsRightTapEnabled="False">

<Page.TopAppBar >
    <AppBar IsSticky="True" IsRightTapEnabled="False" >
        <StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
            <AppBarButton Label="Add Sound" Icon="OpenFile" Click="AppBarButton_Click" ></AppBarButton>
        </StackPanel>
    </AppBar>
</Page.TopAppBar>

<Grid Background="#FF004D40" Name="myGrid" IsRightTapEnabled="False">
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
    <StackPanel Name="StackPanel1" Grid.Row="0" Orientation="Horizontal" IsRightTapEnabled="False">
        <Button Content="Button0" Name ="Button0" RightTapped="Button0_RightTapped"></Button>
    </StackPanel>
</Grid>

1 个答案:

答案 0 :(得分:0)

官方不建议在UWP中使用AppBar。以下部分引用了官方AppBar说明。

  

只有在升级使用AppBar的通用Windows 8应用程序时,才应使用AppBar,并且需要尽量减少更改。对于Windows 10中的新应用,我们建议使用CommandBar控件。

<强>用法

CommandBar添加到<Page.TopAppBar>,就像下面的代码一样。

 <Page.TopAppBar>
        <CommandBar IsSticky="True">
            <AppBarButton
                Click="AppBarButton_Click"
                Icon="OpenFile"
                Label="Add Sound" />              
        </CommandBar>
    </Page.TopAppBar>