2016-02-05 58 views
3

我很喜歡UWP的東西。我正在嘗試創建動態漢堡菜單。 我能創造PrimaryButtons元素,並作爲espected結合它在XAML工作:UWP模板10創建一個動態的漢堡包菜單

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類:

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); 
     } 
    } 
} 

全部放在一起,我期望能獲得相同的結果:

PrimaryButtons.Add(loginButton); 
PrimaryButtons.Add(new MenuItem() { PageType=typeof(Views.Login), PageParameter="", ClearHistory=true, Text="Login", Symbol=Symbol.Contact }); 

但這裏的結果

enter image description here

我錯過了什麼嗎?這是該方案的正確方法嗎?

回答

4

可以這樣做嗎?絕對。

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); 

看起來像這樣(我在搜索示例中試過)。

enter image description here

這是更冗長,因爲XAML語法是非常緊湊的,但如果你願意,你可以做到這一點的代碼隱藏。如果這是一個選項,您可能只想更改現有按鈕的可見性。

祝你好運!

+0

感謝您的幫助!正如你在第一個代碼片段中看到的,我已經有幸添加了一個編寫代碼的按鈕。我的目標是添加相同的按鈕,擴展HaburegerButtonInfo類,添加缺少的堆棧面板。 – thepasto

+0

按鈕的內容屬性可以容納任何你喜歡的東西。您正在嘗試創建的內容目前尚未內置到Template10中。你有點讓它工作。你應該去GitHub並請求一個新的ButtonTypes.Content被添加到HamButtonInfo.CuttonType中。 –