WPF:如何实现通用窗口?

3
我希望在我的桌面应用程序中拥有一个可重复使用的窗口,该窗口可能会有不同的XAML“注入”其中。因为我希望所有的窗口都具有相同的外观(我有一个漂亮的标题栏和关闭按钮等)。
例如,我想在其中使用消息框(确定/取消/字符串)。我希望它可以用来托管一个表单等。
我目前有:
MyWindow.xaml/cs(是一个窗口)
MyMessageBox.xaml/cs(是一个用户控件)
MyForm.xaml/cs(是一个用户控件)
那么最好的实现方式是什么呢? 我只需在MyWindow中放置ContentPresenter,然后以某种方式将其他XAML“注入”其中吗? 我需要其他控件从基础窗口继承一些东西吗?
我只是想听听关于如何完成我想做的事情的最佳方法的反馈。谢谢。

我从这篇文章中得到了一些技巧和窍门:http://www.codeproject.com/KB/WPF/CustomFrames.aspx 这正是我在寻找的! - Shai UI
这是你在找的吗?http://jamescrisp.org/2008/05/26/wpf-control-inheritance-with-generics/ - alansiqueira27
6个回答

2
一个简单的方法是使用一个带有框架的窗口,然后按需加载页面到该框架中。

如果你想将这个(表单?)实现为模板,那么也许可以用ContentPresenter替换Frame。但我不会这样做。 - H H

1

我同意Henk Holterman的回答。我刚刚为这种类型的WPF应用程序编写了一个小型“框架”。我在“内容”页面上使用接口来定义代码后台的常见功能;我有一个通用的页面模板,用于提供标题块、关闭按钮等。

除非您绝对需要它,否则我会避免使用WPF的可视化继承-这可能会非常棘手。


你有把那个框架发布在某个地方吗?或者你能详细解释一下你是如何做到这一点的吗? - Shai UI
看起来你已经找到了需要的东西,但这是我的代码核心部分:链接 - Justin Denton
感谢您发布那段代码。但是我更希望能够使用基于XAML的方法,例如在用户控件中使用<mywindow>..blabla..</mywindow>的方式。我认为您的代码需要直接调用方法。 - Shai UI

0
Catel的DataWindow正是这样做的。您可以在此处找到源代码:

DataWindow.cs


即使它不是商业性质,您也应该提到您是Catel的作者之一。 - H H
这很棒,但是你在哪里定义 DataWindow 的外观呢?似乎所有功能都可用,但我没有看到任何 xaml 代码。 - Shai UI


0

0

我宁愿不使用那个庞然大物的库来处理如此简单的事情。 - Shai UI
@foreyez:说得对,但让我们看看你所拥有的——你想要注入和组合UI实例。这正是Prism所做的。考虑一下未来可能遇到的更复杂的情况;你最终只会不断编写更多的代码来完成已经开发好的功能。 - casperOne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接