Out团队希望创建可重用,可管理的视图.例如,我们希望在不同的应用程序中重用CommonPromptView(我们自己的,可自定义的对话框,我们可以隐藏"取消"按钮,设置标题,显示特定图标等).
该视图在其表面上有几个元素:TextBlocks,Buttons.我们想让它们成为一种风格.
那么,解决这个任务的最佳方法是什么?
在第一种情况下,可以通过两种方式支持样式:
两者都不干净(在我看来).
但是如果View是UserControl,那么每次创建新app的人都必须创建一个新窗口来包含UserControl并将其绑定到DP(Style类型)正确.此外,如果UserControl拥有它自己非常方便的API(最常用操作的静态方法),对于包含UserControl的Window用户来说,这将丢失.
Update
CommonPromptView作为UserControl实现的示例.
Code-behind
public sealed partial class CommonPromptView {
private const int CloseViewTimeIntervalInMilliseconds = 120000;
private DispatcherTimer timer;
public static readonly DependencyProperty CommonPromptBorderStyleProperty = DependencyProperty.Register(
"CommonPromptBorderStyle", typeof (Style), typeof (CommonPromptView), new PropertyMetadata(default(Style)));
public Style CommonPromptBorderStyle {
get { return (Style) GetValue(CommonPromptBorderStyleProperty); }
set { SetValue(CommonPromptBorderStyleProperty, value); }
}
public static readonly DependencyProperty CommonPromptHeaderStyleProperty = DependencyProperty.Register(
"CommonPromptHeaderStyle", typeof (Style), typeof (CommonPromptView), new PropertyMetadata(default(Style)));
public Style CommonPromptHeaderStyle {
get …Run Code Online (Sandbox Code Playgroud) 我有MainWindow和AddEdit UserControl.在里面MainWindow我渲染这个AddEdit <Views:AddEditData />,之前这个命名空间被添加到Window元素:
xmlns:Views="clr-namespace:MyProject.WPF.Views"
+++++++++++++++ ++++++++++++++++
ListOfData + + DataDetails +
+ + +
DataOne + + Name: txtBox1+
DataTwo + + +
DataThree + + +
+ + Save data +
+++++++++++++++ ++++++++++++++++
Run Code Online (Sandbox Code Playgroud)
当用户选择左侧的数据时(例如DataTwo)我想在AddEdit用户控件(DataDetails面板)中显示它的属性(为简单起见,只有Name属性).
由于这UserControl是与MainWindow分开存储的,我应该使用相同的MainWindowViewModel和相同的datacontext,还是应该为AddEdit创建单独的ViewModel UserControl?
希望这听起来很清楚,如果不是,请询问详细信息.