UWP模板10创建动态汉堡包菜单 [英] UWP Template 10 create a dynamic hamburgermenu
问题描述
我对UWP的东西很了解.我正在尝试创建动态汉堡包菜单. 我能够创建PrimaryButtons元素,并按照预期将其绑定到XAML中:
I'm pretty noob with UWP stuff. I'm trying to create dynamic hamburger menu. I was able to create PrimaryButtons element, and binding it in XAML worked as espected:
var loginButton = new HamburgerButtonInfo();
loginButton.ClearHistory = true;
loginButton.PageParameter = "";
loginButton.PageType = typeof(Views.Login);
var stackPanel = new StackPanel { Orientation = Orientation.Horizontal };
stackPanel.Children.Add(new SymbolIcon { Symbol = Symbol.Contact, Width = 48, Height = 48 });
stackPanel.Children.Add(new TextBlock { Text = "Login", VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(12, 0, 0, 0) });
loginButton.Content = stackPanel;
但是我想有一个更干净的解决方案,所以我尝试扩展HamburgerButtonInfo类:
But I'd like to have a cleaner solution, so I tried to extend HamburgerButtonInfo class:
class MenuItem : HamburgerButtonInfo
{
private Symbol symbol;
private String text;
StackPanel stackpanel = new StackPanel { Orientation = Orientation.Horizontal };
TextBox textbox = new TextBox { VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(12, 0, 0, 0) };
SymbolIcon symbolicon = new SymbolIcon { Width = 48, Height = 48 };
public MenuItem():base()
{
StackPanel.Children.Add(symbolicon);
StackPanel.Children.Add(textbox);
this.Content = StackPanel;
}
public String Text
{
get { return text; }
set {
textbox.Text = value;
Set(ref text, value);
}
}
public StackPanel StackPanel
{
get { return stackpanel; }
}
public Symbol Symbol
{
get { return symbol; }
set {
symbolicon.Symbol = value;
Set(ref symbol, value);
}
}
}
将所有内容放在一起,我希望得到相同的结果:
Putting it all together, I expected to get the same result:
PrimaryButtons.Add(loginButton);
PrimaryButtons.Add(new MenuItem() { PageType=typeof(Views.Login), PageParameter="", ClearHistory=true, Text="Login", Symbol=Symbol.Contact });
但这是结果
我错过了什么吗?对于这种情况,这是正确的方法吗?
Am I missing something? Is that the right approach for this scenario?
推荐答案
可以做到吗?绝对.
var stackPanel = new StackPanel
{
Orientation = Orientation.Horizontal
};
stackPanel.Children.Add(new SymbolIcon
{
Width = 48,
Height = 48,
Symbol = Symbol.UnSyncFolder
});
stackPanel.Children.Add(new TextBlock
{
Margin = new Thickness(12, 0, 0, 0),
VerticalAlignment = VerticalAlignment.Center,
Text = "UnSync Folder"
});
var button = new HamburgerButtonInfo
{
Content = stackPanel,
ButtonType = HamburgerButtonInfo.ButtonTypes.Toggle,
ClearHistory = false,
PageType = typeof(Views.DetailPage)
};
MyHamburgerMenu.PrimaryButtons.Add(button);
看起来像这样(我在搜索"示例中尝试过).
Looks like this (I tried it in the Search sample).
它更为冗长,因为XAML语法非常紧凑,但是您可以根据需要在代码隐藏中进行操作.如果可以的话,您可能只想更改现有按钮的可见性.
It's more verbose because the XAML syntax is so compact, but you can do it in code-behind if you want to. You might just want to change visibility of an existing button if that is an option.
祝你好运!
这篇关于UWP模板10创建动态汉堡包菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!