2011-04-29 93 views
13

我有一個在多個視圖中引用的類,但我希望只有一個類在它們之間共享。我已經實現了我的類如下:將一個靜態對象添加到資源字典

using System; 

public class Singleton 
{ 
    private static Singleton instance; 

    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new Singleton(); 
     } 
     return instance; 
     } 
    } 
} 

有沒有一種方法可以將Singleton.Instance添加到我的資源字典中作爲資源? 我想寫點東西像

<Window.Resources> 
    <my:Singleton.Instance x:Key="MySingleton"/> 
</Window.Resources> 

,而不必每次我需要引用它的時候寫{x:static my:Singleton.Instance}

回答

16

接受的答案是錯的,它完全有可能:但你可以將單獨的對象添加到從代碼隱藏的資源。

<!-- assuming the 'my' namespace contains your singleton --> 
<Application.Resources> 
    <x:StaticExtension Member="my:Singleton.Instance" x:Key="MySingleton"/> 
</Application.Resources> 
+0

我沒有試過這個,但[MSDN](http://msdn.microsoft.com/en-us/library/ms742135.aspx)似乎暗示應該可以工作,所以我只想接受這個答案。 – Amanduh 2012-10-19 16:58:55

+0

如果您打算將它合併到資源字典中,則不需要密鑰。 Craig 2014-08-15 05:50:23

4

不幸的是,它不可能從XAML獲得。在XAML

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) { 
     base.OnStartup(e); 

     Resources.Add("MySingleton", Singleton.Instance); 
    } 
} 
+2

根據MSDN的StaticExtension是不是在.NET客戶端配置文件3.5或更低可用。對於其他版本,請參閱其他答案中的XAML版本。 – Alex 2013-10-07 13:32:05