C# 如何忽略按钮以捕获我们在Template10中忽略的按钮内的按钮点击?
我想单击template10汉堡菜单文字按钮内的组合框。我该怎么做呢C# 如何忽略按钮以捕获我们在Template10中忽略的按钮内的按钮点击?,c#,uwp,template10,C#,Uwp,Template10,我想单击template10汉堡菜单文字按钮内的组合框。我该怎么做呢 <Controls:HamburgerMenu x:Name="MyHamburgerMenu" PaneWidth="272"> <Controls:HamburgerMenu.PrimaryButtons> <!-- user potrait --> <Controls:HamburgerButtonInfo ButtonType="L
<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>
我想单击potrait下的组合框。现在,当我点击Potrait附近的任何地方,包括组合框,汉堡窗格崩溃
谢谢
当我点击菜单附近的任何地方,包括组合框,汉堡窗格就会崩溃
上面描述的问题是HamburgerMenu在模板10中的特性。下面的示例简单地解释了此功能
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属性时,将执行InternalIsOpenChanged方法并将IsOpen重置为false,然后激活MyHamburgerManu_IsOpenChanged事件。因此线程进入一个无限循环
汉堡包是密封的。所以你不能继承和重写它的方法。您可以使用SplitView自定义新的汉堡菜单
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;
}
}
partial void InternalIsOpenChanged(ChangedEventArgs<bool> e)
{
UpdateIsPaneOpen(e.NewValue);
UpdateHamburgerButtonGridWidthToFillAnyGap();
UpdateControl();
}