2017-04-02 83 views
0

我想單擊template10 HamburgerMenu文字按鈕內的組合框。我怎麼做。如何忽略按鈕以捕獲我們在Template10中忽略的按鈕內的按鈕?

<Controls:HamburgerMenu x:Name="MyHamburgerMenu" PaneWidth="272"> 

    <Controls:HamburgerMenu.PrimaryButtons> 
     <!-- user potrait --> 
     <Controls:HamburgerButtonInfo ButtonType="Literal" ClearHistory="True"> 
      <RelativePanel Margin="52,4,12,4"> 
       <Ellipse 
        x:Name="Potrait" 
        Width="100" 
        Height="100" 
        Margin="4" 
        RelativePanel.AlignLeftWithPanel="True" 
        RelativePanel.AlignRightWithPanel="True" 
        RelativePanel.AlignTopWithPanel="True" 
        Stroke="Black"> 
        <Ellipse.Fill> 
         <ImageBrush ImageSource="ms-appx:///Assets/child potrait.jpg" Stretch="UniformToFill" /> 
        </Ellipse.Fill> 
       </Ellipse> 
       <ComboBox 
        x:Name="User" 
        Margin="4" 
        HorizontalAlignment="Stretch" 
        RelativePanel.AlignLeftWithPanel="True" 
        RelativePanel.AlignRightWithPanel="True" 
        RelativePanel.Below="Potrait"> 
        <ComboBoxItem Content="Amir" IsSelected="True" /> 
        <ComboBoxItem Content="Aishah" /> 
        <ComboBoxItem Content="Alia" /> 
       </ComboBox> 
       <ComboBox 
        Margin="4" 
        HorizontalAlignment="Stretch" 
        RelativePanel.AlignLeftWithPanel="True" 
        RelativePanel.AlignRightWithPanel="True" 
        RelativePanel.Below="User"> 
        <ComboBoxItem Content="Matematik" IsSelected="True" /> 
        <ComboBoxItem Content="Bahasa Malaysia" /> 
        <ComboBoxItem Content="Bahasa Inggeris" /> 
       </ComboBox> 
      </RelativePanel> 
     </Controls:HamburgerButtonInfo> 

​​ enter image description here

我想點擊potrait下的組合框。現在,當我點擊potrait附近的任何地方(包括組合框),漢堡面板崩潰。

謝謝。

回答

1

當我點擊potrait附近的任何地方(包括combobox),漢堡面板崩潰。

上述「問題」是HamburgerMenu在模板10中的功能。following code只是解釋了此功能。

var escape = new Func<bool>(() => 
{ 
    if (DisplayMode == SplitViewDisplayMode.CompactOverlay 
     || DisplayMode == SplitViewDisplayMode.Overlay) 
     IsOpen = false; 
    if (Equals(ShellSplitView.PanePlacement, SplitViewPanePlacement.Left)) 
    { 
      ShellSplitView.Content.RenderTransform = new TranslateTransform { X = 48 + ShellSplitView.OpenPaneLength }; 
      focus(FocusNavigationDirection.Right); 
      ShellSplitView.Content.RenderTransform = null; 
     } 
      else 
     { 
      ShellSplitView.Content.RenderTransform = new TranslateTransform { X = -48 - ShellSplitView.OpenPaneLength }; 
      focus(FocusNavigationDirection.Left); 
      ShellSplitView.Content.RenderTransform = null; 
     } 
    return true; 
}); 

,當你觸摸漢堡內容倒塌漢堡包窗格中的逃生功能將被執行。

我試圖通過設置IsOpen作爲true直接處理您的問題,當您的commbobox PointerEntered就像下面的代碼。

private bool canCloseHamburgerMenu = true; 
private void User_PointerEntered(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e) 
{ 
    canCloseHamburgerMenu = false; 
} 

private void User_PointerExited(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e) 
{ 
    canCloseHamburgerMenu = true; 
} 

private void MyHamburgerMenu_IsOpenChanged(object sender, ChangedEventArgs<bool> e) 
{ 
    var hm = sender as HamburgerMenu; 
    if ((hm.DisplayMode == SplitViewDisplayMode.CompactOverlay || hm.DisplayMode == SplitViewDisplayMode.Overlay) && e.NewValue == false) 
    { 
     //hm.IsOpen = canCloseHamburgerMenu == false ? true : false; 
    } 
} 

但它拋出棧溢出異常。我在source code找到了原因。

partial void InternalIsOpenChanged(ChangedEventArgs<bool> e) 
{ 
    UpdateIsPaneOpen(e.NewValue); 
    UpdateHamburgerButtonGridWidthToFillAnyGap(); 
    UpdateControl(); 
} 

當我改變IsOpen屬性InternalIsOpenChanged方法將被執行和復位IsOpenfalse然後MyHamburgerMenu_IsOpenChanged事件將被激活。所以線程進入無限循環。

HamburgerMenu的類是密封的。所以你不能繼承和重寫它的方法。您可以使用SplitView來定製新的漢堡包菜單。