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

时间:2013-04-12 20:06:30

标签: c# wpf xaml

如果我在类后面的代码中有代码执行此操作:

MyElement.Content = new XamlUserControlFile();

我怎样才能在xaml中做同样的事情?

2 个答案:

答案 0 :(得分:1)

也许您想要的是带有包含用户控件的XAML的ContentControl?

虽然ContentControl的内容有一些限制, as you can see here。内容必须是Text(运动ToString()方法)或UIElement派生对象。

您可以简单地在ContentControl中构建某种UserControl,将xaml与控件的使用分开。

<强>更新

使用像caliburn.micro这样的MVVM框架可以让你非常接近MVVM。 您只需从ViewModels引用ViewModel。你可以完全摆脱代码隐藏。

假设你有一个类似

的UserControl
<UserControl x:Class="MyUserControlView"
             ...>
    <Grid Background="Green">
    </Grid>
</UserControl>

然后你有一些ViewModel:

public class MyUserControlViewModel : PropertyChangedBase
{
}

然后你很容易在Screen(View和ViewModel)中有一个绑定,它包含UserControl

public MyUserControlViewModel MyUserControlViewModel { get; set; }

通过包含类

中的构造函数注入来初始化它
public ShellViewModel(MyUserControlViewModel viewModel)
{
    this.MyUserControlViewModel = viewModel
}

并设置Binding(在包含XAML中),如:

<ContentControl Name="MyUserControlViewModel " />

这就是你所要做的一切,就像那样容易。

请注意,caliburn.micro具有“约定优于配置”, 所以你必须将你的视图命名为“...查看”和你的ViewModels“... ViewModel”。 (但你可以设置自己的规则)。

而且,在这个例子中非常重要: caliburn.micro可以并且将尽可能地设置<x:Name="...">的绑定 请参阅上面的ContentControl。

答案 1 :(得分:1)

目前还不完全清楚,但缺少更多信息...

如果您正在使用类似......

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=...}"   

要绑定到暴露Content或内部Control(已加载并准备好)的属性,您希望将其放入其中。

你需要prepare它所以它是你想要的形式(直接XAML不起作用,但某种形式的负载)。

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

2)您也可以从后面的代码中Load XAML - 并将其放入资源中 - 或者定义一些您在XAML中实例化的包装器。

然后使用{StaticResource ...}或DynamicResource等

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