使用 C# 和 WinUI3,如何在 XAML 中创建可重用的弹出窗口并在多个代码隐藏中创建它的多个实例?

问题描述 投票:0回答:1

我有一个浮出控件,我想在多个类中重复使用。

            <CommandBarFlyout x:Name="BasicFlyout"
                              AlwaysExpanded="True"
                              x:Key="ImageContextMenu">
                
                <CommandBarFlyout.SecondaryCommands>

                    <AppBarButton x:Name="1"
                    Label="A"/>
                    <AppBarButton x:Name="2"
                    Label="B"/>
                    <AppBarButton x:Name="3"
                    Label="C"/>
                    <AppBarButton x:Name="4"
                    Label="D"/>
                    
                </CommandBarFlyout.SecondaryCommands>
                
            </CommandBarFlyout>

我需要为最多 120 个图像附加唯一的按钮组合,并且每个图像都有一个关联的状态类,其中包含每个按钮是否可见的布尔标志以及每个按钮的回调(将在代码隐藏。

理想情况下,它看起来像这样,尽管语法是关闭的。

CommandBarFlyout flyout = new Resources["ImageContextMenu"] as CommandBarFlyout;
// Set visibility and callbacks
FlyoutBase.SetAttachedFlyout(image, flyout);

问题是我不知道如何在 XAML 中声明它。看起来代码必须添加到整个项目的资源中,但我不知道该怎么做。资源字典不允许我使用 CommandBarFlyout 作为根元素。

c# xaml winui-3 resourcedictionary
1个回答
0
投票

正如你所说,资源字典似乎不允许我们使用CommandBarFlyout作为根元素。

我建议你可以尝试在

StackPanel.Resources
中添加CommandBarFlyout。然后你可以尝试使用 {StaticResource} 标记扩展

喜欢:

<Button x:Name="myButton" Click="myButton_Click" FlyoutBase.AttachedFlyout="{StaticResource ImageContextMenu}">Click Me</Button>

或者使用 {x:Bind} 标记扩展

喜欢:

<Button x:Name="myButton" Click="myButton_Click" FlyoutBase.AttachedFlyout="{x:Bind BasicFlyout}">Click Me</Button>
© www.soinside.com 2019 - 2024. All rights reserved.