【发布时间】:2011-06-14 10:24:46
【问题描述】:
这里有很多关于在运行时加载 XAML 的问题, 但据我所知,这不是重复的。
我在运行时将 XAML 加载到控件中:
<ContentControl Content="{Binding Layout.View, Converter={StaticResource StringToXamlConverter}}"/>
转换器相当简单:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string xaml;
if (value != null)
{
xaml = value.ToString();
}
else
{
xaml = Settings.Default.DefaultLayoutView;
}
var root = XamlReader.Parse(xaml);
return root;
}
现在,在正在加载的 XAML 中,我需要使用 ValueConverters。 转换器被定义为加载 XAML 的窗口的资源。例如:
<c:BooleanToVisibilityValueConverter x:Key="BooleanToVisibilityConverter"/>
当然,如果我尝试使用此资源,XamlReader.Parse() 方法会引发异常,因为在读取时它不可用。
Visibility="{Binding Layout.TextItem1.IsEnabled, Converter={StaticResource BooleanToVisibilityConverter}}"
有没有办法解决这个问题? 也许是一种告诉 XamlReader 忽略这一点的方法? 或者在这种情况下可能工作的 ValueConverters 的替代品?
请注意,使用 DynamicResource 也不起作用。它们不能用于 ValueConverters。
【问题讨论】: