应用程序广泛的UWP中的Flyout

时间:2017-01-16 09:21:00

标签: c# uwp

我在我的应用中有一个弹出窗口,用于将其他联系人添加到本地数据库中。此弹出窗口当前被声明为页面资源,并且完全符合我的需要,但是为了在不同的页面上重复使用它,我需要将弹出窗口的xaml和任何attatched事件复制到每个页面。需要使用它(有几个地方可能需要添加联系人)

有没有办法全局定义一个弹出窗口,这样我只需要引用它而不是每次硬编码?我考虑使用ContentDialog(因为可以将其定义为自己的模块),但我认为这不合适

1 个答案:

答案 0 :(得分:3)

如果在代码中完全创建不是一个选项,您可以在后台创建一个带有类的ResourceDictionary。首先是Styles.xaml

<ResourceDictionary
    x:Class="MyClass.Styles"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Flyout x:Key="MyFlyout">
        <!-- my flyout code -->
    </Flyout>
</ResourceDictionary>

这里重要的是x:Class,其中值必须是我们现在正在创建的相关类的名称空间+名称(在这种情况下为Styles.cs):

namespace MyClass {
    public partial class Styles {
        public Styles() {
            this.InitializeComponent();
        }

        // my events from flyout
    }
}

确保该类声明为partial并在构造函数中调用this.InitializeComponent()

现在,在你的应用资源中添加一个引用:

<Application
    ...
    xmlns:myClass="using:MyClass">

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <myClass:Styles />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

然后您可以将Flyout作为静态资源访问,例如:

<Button Flyout="{StaticResource MyFlyout}" />