如果我在类后面的代码中有代码执行此操作:
MyElement.Content = new XamlUserControlFile();
我怎样才能在xaml中做同样的事情?
答案 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等
可能性是无穷无尽的 - 你应该提供一些更相关的信息。