Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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# 从弹出式XAML内的按钮访问弹出式按钮_C#_Windows_Xaml_Windows Phone 8.1 - Fatal编程技术网

C# 从弹出式XAML内的按钮访问弹出式按钮

C# 从弹出式XAML内的按钮访问弹出式按钮,c#,windows,xaml,windows-phone-8.1,C#,Windows,Xaml,Windows Phone 8.1,我觉得这是一个新手的XAML问题,但现在开始 我想做什么: 我正在开发一个Windows Phone 8.1应用程序,我想为自定义弹出按钮添加功能,以便连续两次单击弹出按钮中的同一菜单按钮,关闭弹出按钮。 示例:用户单击弹出按钮中的“转到设置”菜单项。如果用户现在再次单击它,这意味着我们已经在“设置”菜单中,因此我只想关闭弹出按钮 问题: 我的问题是,当点击弹出按钮时,我需要某种方法来调用弹出按钮内的代码。我没有选择在这里后面编写任何代码,因为我正在使用MVVMCross和Xamarin(并且我

我觉得这是一个新手的XAML问题,但现在开始

我想做什么: 我正在开发一个Windows Phone 8.1应用程序,我想为自定义弹出按钮添加功能,以便连续两次单击弹出按钮中的同一菜单按钮,关闭弹出按钮。 示例:用户单击弹出按钮中的“转到设置”菜单项。如果用户现在再次单击它,这意味着我们已经在“设置”菜单中,因此我只想关闭弹出按钮

问题: 我的问题是,当点击弹出按钮时,我需要某种方法来调用弹出按钮内的代码。我没有选择在这里后面编写任何代码,因为我正在使用MVVMCross和Xamarin(并且我不想将windows phone特定的逻辑移到所有平台viewmodels的常规中)

目前已尝试: 我尝试通过制作一个从button继承的自定义按钮来修复此问题。当按钮加载时,事件被订阅到其点击的事件。发生这种情况时,我会尝试通过递归查看按钮的父项(然后是父项的父项)来获取弹出按钮的句柄,直到找到它为止。 …这不起作用,因为我从未以家长身份获得弹出型按钮,相反,我获得了弹出型按钮演示器(它不允许我访问自定义弹出型按钮),因此我无法在此处调用所需的功能

我试着制作一个从Button继承的定制“FlyBurton”。此按钮具有可在XAML中设置的弹出按钮的DependencyProperty,因此我在按钮内部有一个弹出按钮的句柄。 然而,当我尝试这样做时,我只得到一个异常“System.Void不能从C#使用”,我真的不明白为什么会得到这个异常。下面是我的代码的外观

我的代码: XAML代码段:


依赖项属性声明错误。Is应该是这样的,使用常规属性包装而不是静态getter和setter方法,并将
null
作为默认属性值,而不是
string.Empty

public static DependencyProperty MainMenuFlyoutProperty =
    DependencyProperty.Register(
        "MainMenuFlyout", typeof(MainMenuFlyout), typeof(MainMenuButton),
        new PropertyMetadata(null, MainMenuFlyoutPropertyChangedCallback));

public MainMenuFlyout MainMenuFlyout
{
    get { return (MainMenuFlyout)GetValue(MainMenuFlyoutProperty); }
    set { SetValue(MainMenuFlyoutProperty, value); }
}

您的依赖项属性声明错误。与其声明静态getter和setter方法(就像对附加属性所做的那样),不如使用调用GetValue和SetValue的getter/setter声明
public MainMenuFlyout MainMenuFlyout
属性。此外,
string.Empty
是MainMenuFlyout类型属性的无效默认值。非常感谢!你的反馈是对的,这些改变起了作用!
public class MainMenuButton : Button
    {
        public static DependencyProperty MainMenuFlyoutProperty = DependencyProperty.Register("MainMenuFlyout", typeof(MainMenuFlyout), typeof(MainMenuButton), new PropertyMetadata(string.Empty, MainMenuFlyoutPropertyChangedCallback));

        public static void SetMainMenuFlyout(UIElement element, MainMenuFlyout value)
        {
            element.SetValue(MainMenuFlyoutProperty, value);
        }

        public MainMenuFlyout GetMainMenuFlyout(UIElement element)
        {
            return (MainMenuFlyout)element.GetValue(MainMenuFlyoutProperty);
        }

        private static void MainMenuFlyoutPropertyChangedCallback(DependencyObject dependencyObject,
            DependencyPropertyChangedEventArgs e)
        {
        }
    }
public static DependencyProperty MainMenuFlyoutProperty =
    DependencyProperty.Register(
        "MainMenuFlyout", typeof(MainMenuFlyout), typeof(MainMenuButton),
        new PropertyMetadata(null, MainMenuFlyoutPropertyChangedCallback));

public MainMenuFlyout MainMenuFlyout
{
    get { return (MainMenuFlyout)GetValue(MainMenuFlyoutProperty); }
    set { SetValue(MainMenuFlyoutProperty, value); }
}