使用C#和WinUI3,如何在XAML中创建一个可重用的弹出窗口,并在几个代码后面创建它的多个示例?

z8dt9xmd  于 2023-09-28  发布在  C#
关注(0)|答案(1)|浏览(154)

我有一个Flyout,我想在几个类中重用。

<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作为根元素。

s8vozzvw

s8vozzvw1#

正如您所说,资源字典似乎不允许我们使用CommandBarFlyout作为根元素。
我建议你可以尝试在StackPanel.Resources中添加CommandBarFlyout。然后你可以尝试使用{StaticResource} markup extension
例如:

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

或使用{x:Bind} markup extension
比如:

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

相关问题