我试图在不使用任何MVVM框架的情况下构建MVVM应用程序。 我已经定义了我的主窗口和视图模型,appcontroller,一些视图(UserControl一般建议),它们显示在主窗口面板中,通过使用包含常用样式的另一个usercontrol的合成来共享相同的外观和感觉,到目前为止一切顺利。
我的问题是:我希望我的所有观点和#34;对象"共享几个依赖属性(查看标题,帮助上下文等)。
问题是:你不能把相同的DP名称放到几个对象上,你不能 在设计模式下修改从usercontrol继承的东西(VS设计师似乎只能识别Window,UserControl和Page对象)
我认为我在这里错过了一些东西,但不能把手指放在上面。你能救我吗?
答案 0 :(得分:0)
终于通过了它。
声明一个从usercontrol继承的控件(仅限cs文件,没有xaml)
public class BaseView : UserControl
{
public string Title
{
get { return (string)GetValue(TitleProperty); }
set { SetValue(TitleProperty, value); }
}
// Using a DependencyProperty as the backing store for Title. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TitleProperty =
DependencyProperty.Register("Title", typeof(string), typeof(BaseView), new PropertyMetadata("New view"));
public BaseView()
{
}
}
在此控件的全局资源中声明样式:
<Style TargetType="{x:Type views:BaseView}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type views:BaseView}">
<Border CornerRadius="5" BorderThickness="2">
<Grid Name="RootGrid">
<ContentPresenter></ContentPresenter>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在您可以将BaseView控件子类化为另一个控件之后:
<local:BaseView x:Class="MyNS.NiceView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Title="My Software"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<StackPanel>
<Button>HAAAAhahahaha</Button>
<Label>213456789</Label>
</StackPanel>
</Grid>
</local:BaseView>