如果您将所有的控件模板放在资源字典中,您可以使用这样的模板转换器
<ComboBox Height="52" HorizontalAlignment="Left"
ItemsSource="{Binding templatesNames}"
SelectedValuePath="Type.FullName"
Margin="169,43,0,0" Name="comboBox1"
VerticalAlignment="Top" Width="148" />
<Button Content="Button"
Template="{Binding SelectedItem.Value,
ElementName=comboBox1,
Converter={StaticResource TemplateConverter}}"
Height="56" HorizontalAlignment="Left"
Margin="191,204,0,0" Name="button1"
VerticalAlignment="Top" Width="80" />
在转换器中,从资源字典加载ControlTemplate并返回它。
public class TemplateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string resourceKey = value.ToString();
Uri resourceLocater = new Uri("/YourNamespace;component/Dictionary1.xaml", System.UriKind.Relative);
ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater);
return resourceDictionary[resourceKey] as ControlTemplate;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
更新
如果您的命名空间是dinamicGridLayout,那么转换器应该如下所示
Uri resourceLocater = new Uri("/dinamicGridLayout;component/Dictionary1.xaml", System.UriKind.Relative);
上载的小示例项目
here
.