C# 将内容设置为xaml中xaml文件的实例

C# 将内容设置为xaml中xaml文件的实例,c#,wpf,xaml,C#,Wpf,Xaml,如果我在代码隐藏类中有这样做的代码: MyElement.Content = new XamlUserControlFile(); 我如何在xaml中做同样的事情?也许您想要的是一个包含usercontrol的xaml的ContentControl 但是ContentControl的内容有一些限制, . 内容必须是文本(ToString()方法)或UIElement派生的对象 您可以简单地在ContentControl中构建某种类型的UserControl,将xaml和控件的使用分离开来 更新

如果我在代码隐藏类中有这样做的代码:

MyElement.Content = new XamlUserControlFile();

我如何在xaml中做同样的事情?

也许您想要的是一个包含usercontrol的xaml的ContentControl

但是ContentControl的内容有一些限制, . 内容必须是文本(ToString()方法)或UIElement派生的对象

您可以简单地在ContentControl中构建某种类型的UserControl,将xaml和控件的使用分离开来

更新

利用像这样的MVVM框架可以让您非常接近MVVM。 您只需从ViewModels中引用ViewModels。您可以完全摆脱代码隐藏

假设您有一个像

<UserControl x:Class="MyUserControlView"
             ...>
    <Grid Background="Green">
    </Grid>
</UserControl>
然后,您可以很容易地在屏幕(视图和视图模型)中为其设置绑定,该绑定应包含
UserControl

public MyUserControlViewModel MyUserControlViewModel { get; set; }
通过包含类中的构造函数注入初始化它

public ShellViewModel(MyUserControlViewModel viewModel)
{
    this.MyUserControlViewModel = viewModel
}
并设置绑定(在包含XAML的文件中),如下所示:


这就是你所要做的,就这么简单

请注意caliburn.micro具有“约定优先于配置”的特性, 因此,您必须将视图命名为“…视图”,将视图模型命名为“…视图模型”。 (但你可以制定自己的规则)

在这个例子中,非常重要的一点是: caliburn.micro可以并将根据
设置绑定
请参见上面的ContentControl。

不完全清楚,但缺少更多信息

如果你用的是

hostControl.Content = XamlReader.Load(YourXAML);  
LoadComponent

我不认为XAML中有任何“速记”的东西(如果有的话,我想看看:)

1)您可以使用

Content="{x:Static my:YourStaticClass.XAMLProperty, Converter=...}"
Content="{Binding Source={x:Static my:YourStaticClass.XAMLProperty}, Converter=...}"  
Content="{Binding ViewModelXAMLProperty}, Converter=...}"   
要绑定到一个属性,该属性公开了您要放入其中的
内容
或内部
控件
(已加载并准备好)

您需要
准备
它,使它以您想要的形式出现(直接的XAML不起作用,但需要某种形式的加载)

我已经指定了
Converter
,因为这是另一种方法——如果需要的话,您可以动态转换XAML

2)您还可以
从代码背后加载
XAML,并将其放入资源中,或者定义一些在XAML中实例化的包装器

然后使用
{StaticResource…}
或DynamicResource等


可能性是无穷的-你应该提供一些更相关的信息。

你能告诉我“MyElement”是什么以及“XamlUserControlFile”的内容是什么吗?它可以是ContentControl或TreePanel。。。任何具有内容属性的东西。实际上,利用caliburn.micro这样的框架,这是非常常见的。您将内容设置为某种ViewModel类型的
绑定
,框架将为您解析视图。如果使用框架可以解决您的问题,请看一看我想知道如何实现类似的东西来实例化xaml文件的新实例。
hostControl.Content = XamlReader.Load(YourXAML);  
Content="{x:Static my:YourStaticClass.XAMLProperty, Converter=...}"
Content="{Binding Source={x:Static my:YourStaticClass.XAMLProperty}, Converter=...}"  
Content="{Binding ViewModelXAMLProperty}, Converter=...}"