CommandBar溢出菜单没有检测到水龙头

时间:2016-12-24 09:32:13

标签: c# uwp commandbar

我有一个CommandBar。主要部分有效,包括检测水龙头。溢出菜单显示选项卡名称,但是当我点击其中一个选项卡时,没有任何反应,我无法看到任何代码触发。我错过了什么?

<Page
        x:Class="Jockusch.Calculator.WindowsStore.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:Jockusch.Calculator.WindowsStore"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:system="using:System"
        mc:Ignorable="d">
    <Page.TopAppBar>
        <CommandBar x:Name="TabBar">
            <CommandBar.PrimaryCommands>
            </CommandBar.PrimaryCommands>
            <CommandBar.SecondaryCommands>
            </CommandBar.SecondaryCommands>
        </CommandBar>
    </Page.TopAppBar>
    <Grid Background="White" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" x:Name="PageGrid">
        <local:WindowsAdAndContentWrapperView Grid.Row="0" Grid.Column="0" x:Name="ContentView"></local:WindowsAdAndContentWrapperView>
    </Grid>
</Page>

应用程序启动后不久激活的命令栏设置代码。有很多选项卡,因此其中一些被推入溢出菜单。保留在主菜单中的那些工作正常。

static class WindowsTabContextAdditions
{
  public static void SetupWindowsCommandBar(this TabContext context, CommandBar bar)
  {
    // TabContext and Tab are both my custom classes.
    foreach (Tab tab in context.Tabs)
    {
      AppBarButton button = new AppBarButton();
      IconElement icon = IconElements.ForTab(tab);
      button.Label = tab.DisplayString;
      button.Icon = icon;
      bar.PrimaryCommands.Add(button);
    }
  }
}

static class IconElements
{
  public const string IconPathPrefix = @"ms-appx:///Images/";
  public static IconElement ForTab(Tab tab)
  {
    BitmapIcon r = null;
    string name = tab.WindowsBitmapName();
    string path = IconPathPrefix + name + ".png";
    r = new TabBitmapIcon(tab);
    r.UriSource = new Uri(path);
    r.Tapped += Icon_Tapped;     
    return r;
  }


  private static void Icon_Tapped(Object sender, TappedRoutedEventArgs e)
  {
    // This method fires when the tab is selected. For the non-overflow ones, it works.
    MyDebuggingClass.WriteLine("Tap detected!");
  }
}

1 个答案:

答案 0 :(得分:1)

通常,SecondaryCommands集合只能包含AppBarButton,AppBarToggleButton或AppBarSeparator命令元素。默认情况下,图标不显示在其中。

来自MSDN文档CommandBar.SecondaryCommands property

的来源

因此,如果未显示图标,则不会触发Tap事件。如果要触发Tap事件,则需要先显示图标。

我在此线程Show icon on SecondaryCommands (UWP)中遵循DamirArh的建议,以使SecondaryCommands显示图标。然后我为BitmapIcon注册了Tap事件。它运作良好。当我点击Icon时,Tap事件将被触发。

您可以参考我的代码以供参考:

std::function<double()> g = [&](){ return p.len(); };

printf("%.18g\n", g()); // calls .len() on instance p