我想在运行时将纯 XAML 代码添加到我的 xaml 元素中。有谁知道这是怎么做到的吗?谢谢你。我想做这样的事情:myGrid.innerXAML = stringXAMLcode
这将导致<grid name="myGrid">newgeneratedcodehere</grid>
在 PHP 中,您可以将逐字 HTML 代码直接打印到 HTML 文件中。这可以用c#吗?如果没有,任何人都可以建议解决方法吗?谢谢!
如本 CodeProject 文章中所述,有多种方法可以满足您的要求:
然而,大多数时候你真的不需要它来进行日常操作。
如果您正在使用 WPF,您确实需要摆脱其他框架的传统方法并接受WPF Mentality。
与 XAML 的 WPF 实现相比,HTML(4、5 或其他)看起来像是一个荒谬的笑话,因此您可能在 HTML 中习惯的所有可怕的 hack 在 WPF 中完全不需要,因为后者有很多内置的帮助您以非常干净的方式实现高级 UI 功能的功能。
WPF 在很大程度上基于DataBinding,并促进 UI 和数据之间清晰且定义明确的分离。
例如,当您想通过使用名为DataTemplates的 WPF 功能根据数据“显示不同的 UI 片段”时,您会这样做:
XAML:
<Window x:Class="MyWindow"
...
xmlns:local="clr-namespace:MyNamespace">
<Window.Resources>
<DataTemplate DataType="{x:Type local:Person}">
<!-- this is the UI that will be used for Person -->
<TextBox Text="{Binding LastName}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:Product}">
<!-- this is the UI that will be used for Product -->
<Grid Background="Red">
<TextBox Text="{Binding ProductName}"/>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<!-- the UI defined above will be placed here, inside the ContentPresenter -->
<ContentPresenter Content="{Binding Data}"/>
</Grid>
</Window>
代码背后:
public class MyWindow
{
public MyWindow()
{
InitializeComponent();
DataContext = new MyViewModel();
}
}
视图模型:
public class MyViewModel
{
public DataObjectBase Data {get;set;} //INotifyPropertyChanged is required
}
数据模型:
public class DataObjectBase
{
//.. Whatever members you want to have in the base class for entities.
}
public class Person: DataObjectBase
{
public string LastName {get;set;}
}
public class Product: DataObjectBase
{
public string ProductName {get;set;}
}
请注意我是如何谈论我的Data
,Business Objects
而不是担心任何操纵 UI 的黑客行为。
另请注意,在将由 Visual Studio 编译的 XAML 文件中定义 DataTemplates 如何让我对我的 XAML 进行编译时检查,而不是将其放在一个string
过程代码中,这当然没有任何类型的一致性检查。
我强烈建议您阅读Rachel 的回答(上面链接)和相关的博客文章。
WPF 摇滚
你为什么不添加你想要的元素呢?就像是:
StackPanel p = new StackPanel();
Grid g = new Grid();
TextBlock bl = new TextBlock();
bl.Text = "This is a test";
g.addChildren(bl);
p.addChildren(g);
您可以对 XAML 中存在的所有元素执行此操作。
问候
您可以使用XamlReader
创建UIElement
您可以设置为内容控件或布局容器的子项:
string myXamlString = "YOUR XAML THAT NEEDED TO BE INSERTED";
XmlReader myXmlReader = XmlReader.Create(myXamlString);
UIElement myElement = (UIElement)XamlReader.Load(myXmlReader);
myGrid.Children.Add(myElement );