XAML 如何在UWp的UserControl中有条件地使用两个不同的弹出菜单

mwyxok5s  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(169)

我有一个包含按钮的UserControl,当单击该按钮时,会出现一个弹出菜单。但是,我希望根据特定条件使用不同的弹出菜单。
我已经在UserControl中创建了一个dependency属性来确定要显示哪个弹出菜单,并创建了一个转换器来将dependency属性的值转换为相应的弹出菜单。如何从视图中更改dependency属性的值

eulz3vhy

eulz3vhy1#

最直接的方法就是修改后面代码中的MenuFlyout对象,可以根据具体情况手工修改MenuFlyout的项目。
我注意到你正在转换器中创建。所以你需要做的是在转换器中创建MenuFlyoutItems
这是我做的一个简单的演示。当另一个按钮被点击后,按钮的菜单弹出会改变。

Xaml:

<StackPanel>
    <Button  x:Name="MyButton" Content="Click" >
        <Button.Flyout>
            <MenuFlyout  x:Name="TestFlyout">
                <MenuFlyoutItem Text="Change color"  />
            </MenuFlyout>
        </Button.Flyout>
    </Button>

    <Button Content="ChangeMenuItem" Click="MyButton_Click"/>
</StackPanel>

代码隐藏:

bool testFlag= false;
    public MainPage()
    {
        this.InitializeComponent();
    }

    private void MyButton_Click(object sender, RoutedEventArgs e)
    {
        if (testFlag)
        {
            GenerateItemA();
            testFlag = false;
        }
        else 
        {
            GenerateItemB();
            testFlag = true;
        }

    }

    private void GenerateItemA() 
    {

        // remove all the existing items
        TestFlyout.Items.Clear();

        TestFlyout.Items.Add(new MenuFlyoutItem { Text = "Group A" });
        TestFlyout.Items.Add(new MenuFlyoutItem { Text = "Group B" });
        TestFlyout.Items.Add(new MenuFlyoutItem { Text = "Group c" });
    }

    private void GenerateItemB()
    {
        // remove all the existing items
        TestFlyout.Items.Clear();

        TestFlyout.Items.Add(new MenuFlyoutItem { Text = "Group 123" });
        TestFlyout.Items.Add(new MenuFlyoutItem { Text = "Group 234" });
        TestFlyout.Items.Add(new MenuFlyoutItem { Text = "Group 435" });

    }

相关问题