这里有很多关于在运行时加载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。