XAML - 呈现变量的内容

本文关键字:变量 XAML | 更新日期: 2023-09-27 18:30:36

我有一个问题,我想渲染一个变量的内容(通过表达式"Metatag.Configuration[VisualizerCode]引用)。值"在下面的代码中)。该变量包含 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 Margin="0,10,0,0" Visibility="Visible">
  <ContentControl Content="{Binding Path=Metatag.Configuration[VisualizerCode].Value}">
</ContentControl>

不幸的是,如果我运行它,字符串(= 变量的未解释内容)将打印为 Grid 中的文本,而不是被解释(在这种情况下,应该绘制 2 个漂亮的简单边框)。

如何让 XAML 解释变量的内容并呈现它?

谢谢!

沃隆德

XAML - 呈现变量的内容

您可以

尝试使用一些自定义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表示声明转换器类的本地命名空间。