- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么在绑定(bind)到相关系统命令的命令绑定(bind)的处理程序外部调用 SystemCommands.MaximizeWindow(this) 不起作用?
为什么这些 SystemCommands 方法会存在?似乎所有这些功能都可以通过窗口本身完成。
最佳答案
编辑:
SystemCommands 的静态方法是在 .NET 4.5 中引入的,作为常见窗口操作的首选方式。在引擎盖下,它们是使用非阻塞 PostMessage 实现的函数而不是阻塞 SendMessage (window.Close()) 或 ShowWindow函数(window.WindowState)。
即使在命令绑定(bind)处理程序之外它们也应该工作得很好(假设显示了窗口):
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel VerticalAlignment="Center" Orientation="Horizontal">
<Button Content="close" Name="CloseButton" Click="CloseButton_Click" />
<Button Content="maximize" Name="MaximizeButton" Click="MaximizeButton_Click" />
<Button Content="restore" Name="RestoreButton" Click="RestoreButton_Click" />
<Button Content="minimize" Name="MinimizeButton" Click="MinimizeButton_Click" />
</StackPanel>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void CloseButton_Click(object sender, RoutedEventArgs e)
{
SystemCommands.CloseWindow(this);
}
private void MaximizeButton_Click(object sender, RoutedEventArgs e)
{
SystemCommands.MaximizeWindow(this);
}
private void RestoreButton_Click(object sender, RoutedEventArgs e)
{
SystemCommands.RestoreWindow(this);
}
private void MinimizeButton_Click(object sender, RoutedEventArgs e)
{
SystemCommands.MinimizeWindow(this);
}
}
原始答案:
首先,commands是非常有用的设计模式,通过将其封装在一个对象中来将方法调用的源与目标分离。
您可以通过调用 Close()
方法关闭窗口(目标),但此操作通常由用户触发,例如点击一个按钮(来源)。如果您的 UI 非常简单,那么将此操作封装在命令中可能有点矫枉过正(button.Click
处理程序调用 window.Close()
)但是 typically最好不要将 UI 元素直接相互绑定(bind)(button.Click
处理程序执行调用 window.Close()
的 command
)。
SystemCommands , ApplicationCommands , ComponentCommands , MediaCommands , NavigationCommands , EditingCommands只是 ICommand 接口(interface)的实现(遵循命令模式),因此您不必担心自己创建这些典型对象。
将这些命令实际连接到目标和源由您决定(这就是为什么只执行它们不会做任何事情)。
最后,因为所有这些命令都是 RoutedCommands一个更适合 MVVM 的方法是避免它们并实现你自己的 RelayCommands ( DelegateCommands ) 是您的 ViewModel 的一部分。
关于wpf - SystemCommands.[SomeWindowAction] 在命令之外 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20601688/
为什么在绑定(bind)到相关系统命令的命令绑定(bind)的处理程序外部调用 SystemCommands.MaximizeWindow(this) 不起作用? 为什么这些 SystemComman
我是一名优秀的程序员,十分优秀!