// (c) Copyright Microsoft Corporation.
// This source is subject to [###LICENSE_NAME###].
// Please see [###LICENSE_LINK###] for details.
// All other rights reserved.
using System;
using System.Collections.Generic;
using System.Windows.Controls;
using System.Windows.Markup;
namespace System.Windows.Controls{
internal sealed class ResourceHelper
{
static Dictionary<string, string> _cache = new Dictionary<string, string>();
private ResourceHelper()
{
}
static public ControlTemplate GetControlTemplate<T>()
{
return GetControlTemplate(typeof(T));
}
static public ControlTemplate GetControlTemplate(Type type)
{
return GetControlTemplate(type, type.FullName);
}
static public ControlTemplate GetControlTemplate(Type type, string resourceName)
{
string xaml = ResourceHelper.GetTemplateXaml(type, resourceName);
if (String.IsNullOrEmpty(xaml))
{
throw new Exception(type.Name + " xaml could not be loaded");
}
else
{
#if DEBUG
try
{
#endif
ControlTemplate result = (ControlTemplate)XamlReader.Load(xaml);
return result;
#if DEBUG
}
catch
{
throw;
}
#endif
}
}
static public string GetTemplateXaml(Type type, string resourceName)
{
string template;
if (!_cache.TryGetValue(resourceName, out template))
{
System.IO.Stream s = type.Assembly.GetManifestResourceStream(resourceName + ".xaml");
if (s != null)
{
template = new System.IO.StreamReader(s).ReadToEnd();
_cache[resourceName] = template;
}
}
return template;
}
}
}
|