|
|
1
6
如果您确实需要强制执行窗口的单个实例,那么使用工厂创建方法的静态实例(某种风格的实例)肯定是一个可行的选项,就像使用数据库时的单个DataContext实例一样。 您也可以编写自己的WindowManager类,尽管这看起来像是多余的,而且本质上是相同的(除了工厂方法将在单个类中)。 然而,重新阅读你的帖子,我想知道这是否是一个失踪的树木森林案件。您提到的settingsWindow又称accountWindow,让我觉得您应该只使用showDialog()。这将以模态方式打开一个窗口,这意味着不能与调用窗口(或应用程序中的任何其他窗口)进行交互。只需在该对话框中设置一个属性,按下OK按钮时将DialogResult设置为true,然后在父窗口中读取该属性。 基本上,您只需要像这样使用ShowDialog。我遗漏了很多实现细节,比如绑定和硬编码到控件。这些细节并没有看到ShowDialog的工作原理那么重要。 为了简单起见,假设您有一个名为MyAppOptions的类,它很好地反映了应用程序的选项。为了简单起见,我将省略大部分实现细节,但它可能实现inotifyPropertiesChanged、具有方法、字段和属性等。
然后,让我们简单地说明这一点,并假设您想在按下某个窗口上的按钮时显示一个选项对话框。此外,我将假设有一些变量是用您的选项设置的,这些变量是在启动时加载的。
现在假设OptionsDialog是您在项目中创建的一个窗口,它上面有一个与MyBooleanOption相关的复选框和一个用于MyStringOption的文本框。它还有一个确定按钮和一个取消按钮。后面的代码可能会使用绑定,但现在我们将硬编码这些值。
就实现细节而言,这是一个非常基本的示例。联机搜索ShowDialog以了解更多详细信息。要记住的重要关键是:
|
|
|
2
15
也许有更好的方法可以做到这一点,但这里有一个相对简单的方法…… 在window类上放置一个静态bool来标记它是否打开。然后,在load()事件中将其设置为true,在close事件中将其设置为false。然后,在打开窗口的代码中,检查标志。 这是一些伪代码给你一个主意…
|
|
|
3
1
下面扩展上述解决方案,以便在窗口已打开时重新显示窗口。在这种情况下,它是一个帮助窗口。
此代码都在与窗口关联的ViewModel(MVVM)中。它由一个钩住窗口按钮的ICommand调用(很自然,它会显示一个问号!!) 涉及以下属性(在本例中,它是一个telerik radwindow,但它可以是任何窗口对象,您也可以只存储窗口句柄,但使用此属性可以更平滑地操作对象,例如helpwin.bringtofront(),如上例所示…
在窗口本身(WPF窗口)中
在视图中XAML … …
|
|
|
4
0
用单件怎么样?
然后就用
|
|
5
0
这里有一种替代方法,不需要在每个窗口中设置和更新静态属性:
用途:
|
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |
|
|
Barta · WPF MVVM不更新视图 1 年前 |
|
|
Denis Ivanov · WPF控件在属性更改时不会更新 1 年前 |
|
|
codymanix · WPF:TextBlock周围可见小边框? 1 年前 |
|
|
Nostromo · 来自背景对象的工具提示 2 年前 |
|
|
Nuvolari · 从可观测集合添加/删除时出现对象处理异常 2 年前 |
|
|
CCarter · 只能在设计器中DependencyObject的DependencyProperty上设置显示“Binding”的WPF ICommand DependencyProperties[重复] 2 年前 |
|
|
Thern · 在UI线程(WPF)上的void方法中调用异步函数 2 年前 |