我在我的应用中有一个弹出窗口,用于将其他联系人添加到本地数据库中。此弹出窗口当前被声明为页面资源,并且完全符合我的需要,但是为了在不同的页面上重复使用它,我需要将弹出窗口的xaml和任何attatched事件复制到每个页面。需要使用它(有几个地方可能需要添加联系人)
有没有办法全局定义一个弹出窗口,这样我只需要引用它而不是每次硬编码?我考虑使用ContentDialog
(因为可以将其定义为自己的模块),但我认为这不合适
答案 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}" />