使用命令绑定或事件处理程序是在WPF中实现关闭、最小化和最大化按钮的更好方法吗



我正在WPF C#中制作关闭、最大化和最小化按钮。我尝试了两种不同的方法,这两种方法似乎都对我有效,但我只想知道哪种方法通常被认为是这种实现的更好实践。

方法一:在XAML中:

<Window.CommandBindings>
<CommandBinding Command="{x:Static SystemCommands.CloseWindowCommand}" CanExecute="CommandBinding_CanExecute_1" Executed="CommandBinding_Executed_1" />
<CommandBinding ... />
<CommandBinding ... />
</Window.CommandBindings>
<Button Command="{x:Static SystemCommands.CloseWindowCommand}" Content ="close"/>
<Button ... />
<Button .../>

在C#中:

private void CommandBinding_Executed_1(object sender, ExecutedRoutedEventArgs e)
{
SystemCommands.CloseWindow(this);
}
...

方法二:在XAML中:

<Button Content="X" Click="CloseButton_Click" />
<Button .../>
<Button ... />

在C#中:

private void CloseButton_Click(object sender, RoutedEventArgs e)
{
Close();
}
...

由于关闭、最大化和最小化按钮通常是控件的一部分或控件的模板,因此可以直接处理按钮的Click事件。没有必要也没有理由仅仅为了能够在控件内部处理Button的单击而引入任何命令绑定。

您可以在XAML中挂接事件处理程序,或者,如果按钮是在自定义控件的ControlTemplate中定义的,则可以覆盖控件的OnApplyTemplate()方法,并按照此处的建议以编程方式挂接事件处理器:https://blog.magnusmontin.net/2013/03/16/how-to-create-a-custom-window-in-wpf/.

按钮点击处理程序简单快捷(易于实现)。如果您确定只使用这个按钮来关闭窗口,那么点击处理程序就足够了。然而,如果您可能需要多个位置来关闭窗口(例如,您将使用"关闭"菜单选项),那么最好不要将相同的逻辑分布在多个位置并使用一个命令,因为命令在一个位置具有所有处理逻辑(在您的情况下为CommandBinding_Executed_1)。此外,该命令具有CanExecute逻辑,因此您可以自动禁用关闭按钮(以及所有其他"关闭"控件),以防窗口现在无法关闭(使用单击处理程序,您必须自己编写此逻辑)。此外,使用命令,您可以从树下的任何控件关闭窗口,即使该控件根本并没有引用您的窗口。这通常适用于"命令与单击处理程序",而不是特别适用于关闭窗口的情况,在这种情况下,上面的一些内容可能会显得有点后悔。

最新更新