我有一个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!");
}
}
答案 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