2012-03-15 6 views
0

XAML의 한 줄 내에서 ResourceDictionary에 여러 리소스를 추가하고 싶습니다. 나는 그것에서 본보기를 만들려고 노력할 것이다.ResourceDictionary에 리소스를 추가하는 개체

이 상상 :

public class AllDictionaries : ResourceDictionary 
    { 
    public string BaseName { get; set; } 

    public AllDictionaries() 
    { 
     Clear(); 
     var s = BaseName; 
     var DictionariesToLoad = new[] { "A", "B", "C", "D" }; 
     foreach (var b in DictionariesToLoad) 
     { 
     var t = Type.GetType(b + s); 
     var resDir = Activator.CreateInstance(t) as ResourceDictionary; 
     Add(b + s, resDir); 
     } 
    } 
    } 

그러나 :

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:util="clr-namespace:Util"> 

    <util:AllDictionaries x:Key="AllDictionaries" BaseName="MyResourceDictionary" /> 
</ResourceDictionary> 

내가 이런 새로운있는 ResourceDictionary을 시도했다 :

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:util="clr-namespace:Util"> 

    <util:MyResourceDictionaryA x:Key="MyResourceDictionaryA" /> 
    <util:MyResourceDictionaryB x:Key="MyResourceDictionaryB" /> 
    <util:MyResourceDictionaryC x:Key="MyResourceDictionaryC" /> 
    <util:MyResourceDictionaryD x:Key="MyResourceDictionaryD" /> 
</ResourceDictionary> 

내가 좋아하는 뭔가를하고 싶습니다 생성자가 호출되지 않습니다. (또는 XAML에서 다른 것보다 먼저 참조하지 않습니다. {StaticResource MyResourceDictionaryX} which hasn 응용 프로그램 리소스에 추가되어 예외를 throw합니다. 나는 또한 BaseName 세터에 코드를 넣으려고했으나 아무 소용이 없었다.

이것은 내가 필요로하는 것을 지나치게 단순화 한 것이지만, 나는 XAML을보다 일반적인 것으로 만들려고 노력하고있다.

어떻게 이것을 달성 할 수 있을지에 대한 힌트가 있습니까?

주 1은 : 생성 된 리소스 사전 내가 AllDictionaries 리소스를 생성 한 범위에서 XAML의 나머지 부분에 대한 자원 (자신의 Key 사용)을 사용할 수 있어야합니다.

주 2 : 실제적인 목적은, 이제 내가 그

+0

fyi :'AllDictionaries' ctor가 실행 중일 때'BaseName' (그러므로'var s')가 null –

+0

이 될 수 있습니까? 앱의 ctor에서'Util'을 검사하는 부트 스트 래퍼를 실행하십시오. 'ResourceDictionary' 타입을위한 DLL은'Application.Current.Resources.MergedDictionaries.Add'도 –

+0

, perf 문제를 스케이트하기 위해 [병합 된 사전에 약간의 뉘앙스가 있습니다] (http://www.wpftutorial.net/ MergedDictionaryPerformance.html). –

답변

1

Merged Resource Dictionary에 아무것도 변경할 수 없습니다 그래서 MyResourceDictionaryX 클래스의 소스 코드에 액세스 할 수없는 가정 해 봅시다 이미 당신이 ... 그것을 할 수 원하는 것을 XAML 또는 코드를 통해 만들 수 있습니다.

+0

실제로 병합 된 리소스 사전으로 클래스를 사용하려고했지만 작동하지 않았습니다.하지만 클래스의 다른 문제로 인해 발생했습니다. 이제 나는 그것이 정말로 효과가있는 것을 본다. – Jcl

관련 문제