我有一个问题,我想渲染一个变量的内容(通过表达式" Metatag.Configuration [VisualizerCode] .Value"在下面的代码中引用)。该变量包含xaml代码(作为字符串),例如以下内容:
<Grid>
<Canvas>
<Border Canvas.Top="0" Canvas.Left="390" Width="50" Height="100" BorderThickness="2" BorderBrush="Black"> </Border>
<Border Canvas.Top="100" Canvas.Left="340" Width="100" Height="50" BorderThickness="2" BorderBrush="Black"> </Border>
</Canvas>
</Grid>
在我的应用程序中,我有一个Grid,我想在其中呈现变量的内容:
<Grid Margin="0,10,0,0" Visibility="Visible">
<ContentControl Content="{Binding Path=Metatag.Configuration[VisualizerCode].Value}">
</ContentControl>
不幸的是,如果我运行它,字符串(=变量的未解释内容)将作为文本打印在网格中,而不是被解释(在这种情况下,应绘制2个漂亮的简单边框)。
如何让XAML解释变量的内容并进行渲染?
谢谢!
Woelund
答案 0 :(得分:1)
您可以尝试使用一些自定义Converter
将字符串转换(解析)到Grid
的某个实例:
public class StringToElementConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture){
var pc = new ParserContext();
pc.XmlnsDictionary[""] =
"http://schemas.microsoft.com/winfx/2006/xaml/presentation";
pc.XmlnsDictionary["x"] = "http://schemas.microsoft.com/winfx/2006/xaml";
return XamlReader.Parse(System.Convert.ToString(value), pc);
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture){
throw new NotImplementedException();
}
}
将转换器声明为某种资源,并用于XAML代码中的绑定:
<Window.Resources>
<local:StringToElementConverter x:Key="elementConverter"/>
</Window.Resources>
<ContentControl Content="{Binding Metatag.Configuration[VisualizerCode].Value,
Converter={StaticResource elementConverter}}"/>
我希望您知道如何声明前缀local
,表示声明转换器类的本地命名空间。