2017-01-16 35 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