2017-01-16 38 views
2

我在我的应用程序,我用来添加额外的联系人到本地数据库的飞出。此弹出窗口当前被声明为页面资源,并且完全按照我需要的方式进行声明,但是为了在不同的页面上重新使用它,我需要将xaml用于弹出窗口以及任何attatched事件复制到每个页面需要使用它(有几个地方可能需要添加一个联系人)应用程序广泛访问在UWP飞出

是否有一种全局定义弹出方式的方法,以便我只需要引用它而不是每次硬编码?我考虑使用ContentDialog(因为它可以被定义为它自己的模块),但我认为这不是合适的

+0

是否有一个理由,为什么你不能创建在C#代码中完全飞出?然后,您可以简单地创建一个返回Flyout的静态方法。 – schumi1331

+0

@ schumi1331它是我考虑的事情,但它意味着重新创建布局。我希望重用已经写好的XAML – Takarii

回答

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> 

然后你就可以访问在弹出的静态资源,如:

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

我喜欢这种方法。我会尝试一下,如果它合适的话就标记出来 – Takarii