Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何忽略按钮以捕获我们在Template10中忽略的按钮内的按钮点击?_C#_Uwp_Template10 - Fatal编程技术网

C# 如何忽略按钮以捕获我们在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

我想单击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>

我想单击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();
}