目前我正在使用DataTemplateSelector在我的UserControl.Resources中查找DataTemplates,但我想将它们移到ResourceDictionary中。如何从DataTemplateSelector中查看ResourceDictionary?
这是我目前的DataTemplateSelector:
public class SettingsDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is Setting)
{
Setting registeritem = item as Setting;
if (registeritem.EditValueVar.EditType == EditType.Textfield)
return element.FindResource("TextboxDataTemplate") as DataTemplate;
else if (registeritem.EditValueVar.EditType == EditType.DropDown)
return element.FindResource("ComboDataTemplate") as DataTemplate;
else if (registeritem.EditValueVar.EditType == EditType.Slider)
return element.FindResource("SliderDataTemplate") as DataTemplate;
else
throw new ArgumentOutOfRangeException(registeritem.EditValueVar.EditType.ToString());
}
return null;
}
}发布于 2018-01-23 17:41:07
在单独的ResourceDictionary中定义DataTemplate,然后将其添加到App.xaml
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/MyDataTemplate.xaml" />
</ResourceDictionary.MergedDictionaries>在您的DataTemplateSelector中,您可以通过以下方式获取模板:
Application.Current.FindResource("myCustomDataTemplate") as DataTemplate;其中,myCustomDataTemplate是您在MyDataTemplate.xaml文件中指定的数据模板的键。
发布于 2018-01-23 18:35:03
您可以向DataTemplateSelector类添加ResourceDictionary属性:
public class SettingsDataTemplateSelector : DataTemplateSelector
{
public ResourceDictionary ResourceDictionary { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is Setting)
{
Setting registeritem = item as Setting;
if (registeritem.EditValueVar.EditType == EditType.Textfield)
return ResourceDictionary["TextboxDataTemplate"] as DataTemplate;
else if (registeritem.EditValueVar.EditType == EditType.DropDown)
return ResourceDictionary["ComboDataTemplate"] as DataTemplate;
else if (registeritem.EditValueVar.EditType == EditType.Slider)
return ResourceDictionary["SliderDataTemplate"] as DataTemplate;
else
throw new ArgumentOutOfRangeException(registeritem.EditValueVar.EditType.ToString());
}
return null;
}
}您在XAML中设置的...that:
<local:SettingsDataTemplateSelector x:Key="selector">
<local:SettingsDataTemplateSelector.ResourceDictionary>
<ResourceDictionary Source="Dictionary1.xaml" />
</local:SettingsDataTemplateSelector.ResourceDictionary>
</local:SettingsDataTemplateSelector>https://stackoverflow.com/questions/48397889
复制相似问题