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 : 실제적인 목적은, 이제 내가 그
fyi :'AllDictionaries' ctor가 실행 중일 때'BaseName' (그러므로'var s')가 null –
이 될 수 있습니까? 앱의 ctor에서'Util'을 검사하는 부트 스트 래퍼를 실행하십시오. 'ResourceDictionary' 타입을위한 DLL은'Application.Current.Resources.MergedDictionaries.Add'도 –
, perf 문제를 스케이트하기 위해 [병합 된 사전에 약간의 뉘앙스가 있습니다] (http://www.wpftutorial.net/ MergedDictionaryPerformance.html). –