我正在构建WPF应用程序并将caliburn.micro用于MVVM。 我有几十个观看次数(UserControls)。
视图有一个标题正文和页脚。 如下图所示,标题包含两个用于crud操作的按钮,页脚包含一个状态栏。
所有视图的页眉和页脚部分都是相同的,但是视图的正文内容将不同。 目前我已经为每个视图重复了标题和正文代码,现在我试图消除重复代码。
为实现这一目标,我想制作一个共同的基本视图,与所有其他观点分享。
当前实施
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<Grid Name="Header/>"
<Grid Name="Body/>"
<Grid Name="Footer/>"
</StackPanel>
</UserControl>
尝试实现
之类的内容基本视图
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<Grid Name="Header/>"
<!-- {Placeholder for child view} -->
<Grid Name="Footer/>"
</StackPanel>
</UserControl>
ChildView
<Grid Name="Body"/>
可能是我的做法错了(我对WPF来说是新手)。
我的目标是通过在视图中继承一些控件来消除重复代码。
如何将基本视图与子视图结合使用? 谁能建议我达到我的要求? 提供一些代码示例将受到高度赞赏。
答案 0 :(得分:2)
例如,您可以在父窗口中定义公共页眉和页脚,或者在父窗口的XAML标记中创建两个单独的用户控件,然后使用{将子视图注入到同一窗口中{1}},例如:
ContentControl
子视图对页眉和页脚没有任何了解。
答案 1 :(得分:0)
您可以嵌套UserControl
,就像嵌套任何其他元素一样,这样就可以做到这样的事情
<UserControl x:Name="HeaderControl">
<UserControl x:Name="ChildControl"/>
</UserControl>
然后,您在标题控件中使用DependencyProperty
将您的子控件与此类关联起来
public UserControl ChildControl
{
get { return (UserControl)GetValue(ChildControlProperty); }
set { SetValue(ChildControlProperty, value); }
}
public static readonly DependencyProperty ChildControlProperty =
DependencyProperty.Register("Text", typeof(UserControl), typeof(UserControl), new PropertyMetadata(null));
This文章提供了一个很好的概述 - 我知道它说的是Silverlight,但它使用相同的基本方法。