gpt4 book ai didi

wpf - SystemCommands.[SomeWindowAction] 在命令之外 :

转载 作者:行者123 更新时间:2023-12-01 15:24:15 30 4
gpt4 key购买 nike

为什么在绑定(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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com