簡體   English   中英

如何在VS 2010中為XAML設計器初始化類?

[英]How to initialize class for XAML designer in VS 2010?

我在Utils.dll中定義了以下標記擴展名

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "Whatever")]
namespace Whatever
{
    public class GetString : MarkupExtension
    {
        public static ResourceManager ResourceManager { get; set; }
        public string Key { get; set; }

        public GetString(string key)
        {
            Key = key;
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (ResourceManager == null) 
                throw new InvalidOperationException();
            return ResourceManager.GetString(Key);
        }
    }
}

它允許我編寫如下代碼: <TextBlock Text="{GetString txt_login}" />

在使用此類之前,必須先初始化ResourceManager。 我在應用程序啟動時執行此操作。 一切正常,除非我不能使用設計器-它將始終拋出InvalidOperationException。 在設計人員嘗試實例化該類之前,有沒有辦法初始化該類?

一種選擇是向此類或在某個靜態類的某個地方添加屬性,如下所示:

public bool IsDesignTime
{
    get
    {
       return (System.Windows.Application.Current == null) || (System.Windows.Application.Current.GetType() == typeof(System.Windows.Application));
    }
}

然后修改您的擴展程序:

public override object ProvideValue(IServiceProvider serviceProvider)
{
    if (IsDesignTime)
    {
        // add code to init resource manager for design time
    }
    if (ResourceManager == null) 
        throw new InvalidOperationException();
    return ResourceManager.GetString(Key);
}

另一個選擇是,如果它為null,則只在此類中初始化ResourceManager。 無論哪種。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM