C# 如何建立我自己的关闭按钮?
我有一个带有MVVM的wpf应用程序。我试图在这里建立我自己的关闭按钮。基于这个答案,我在视图(xaml.cs)代码中添加了一个按钮事件处理程序。但是,它无法识别C# 如何建立我自己的关闭按钮?,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个带有MVVM的wpf应用程序。我试图在这里建立我自己的关闭按钮。基于这个答案,我在视图(xaml.cs)代码中添加了一个按钮事件处理程序。但是,它无法识别Close()调用(上下文中不存在-无法解析符号) 我还尝试了另一个答案,并将命令和命令参数添加到按钮的xaml中。但其背后的功能并没有获得成功。在使用RelayCommand时,我的wpf也无法识别RelayCommand。然后说我必须自己写(真的?)。我记得有一种简单的方法,类似于为按钮设置事件处理程序并调用Close()。但是,我
Close()代码>调用(上下文中不存在-无法解析符号)
我还尝试了另一个答案,并将命令
和命令参数
添加到按钮的xaml中。但其背后的功能并没有获得成功。在使用RelayCommand
时,我的wpf也无法识别RelayCommand
。然后说我必须自己写(真的?)。我记得有一种简单的方法,类似于为按钮设置事件处理程序并调用Close()代码>。但是,我如何才能做到这一点,或者为什么它对我不起作用
查看代码:
private void closeButton_Click(object sender, RoutedEventArgs e)
{
// I want to call close the whole app on button click
//Close(); is not recognized
}
private void performMainCloseButtonCommand(object Parameter)
{
// This doesn't get hits on button click
Window objWindow = Parameter as Window;
objWindow.Close();
}
按钮XAML:
<Button x:Name="closeButton" RenderTransformOrigin="0.5,0.5" Padding="0" Margin="701,0,0,0" BorderThickness="0" Click="closeButton_Click" Command="{Binding MainCloseButtonCommand}" CommandParameter="{Binding ElementName = mainWindow}" Height="45" Width="45" >
<StackPanel Height="45" Width="45">
<Image x:Name="closeButtonImage" Margin="0" Source="/ProjectName;component/Resources/x.fw.png" Height="33"/>
<TextBlock Text="Close" Width="36" Padding="6,0,0,0" HorizontalAlignment="Center" Height="13" FontSize="10"/>
</StackPanel>
</Button>
在事件处理程序中无法识别Close,因为当前类中可能没有名为Close的方法。如果要调用主窗口的关闭方法,可以使用:
private void closeButton_Click(object sender, RoutedEventArgs e)
{
Application.Current.MainWindow.Close();
}
上面提到的不是一个很好的方法,也不符合MVVM模式。这与你的第二个问题有关。如果看不到代码的剩余部分,很难说命令绑定为什么不起作用。我猜你没有把命令接好让它开火。您需要确保已经创建了RelayCommand实例,并且正确设置了命令属性。Close在事件处理程序中无法识别,因为当前类中可能没有名为Close的方法。如果要调用主窗口的关闭方法,可以使用:
private void closeButton_Click(object sender, RoutedEventArgs e)
{
Application.Current.MainWindow.Close();
}
上面提到的不是一个很好的方法,也不符合MVVM模式。这与你的第二个问题有关。如果看不到代码的剩余部分,很难说命令绑定为什么不起作用。我猜你没有把命令接好让它开火。您需要确保创建了RelayCommand实例,并且正确设置了命令属性。如果您仅在视图和代码隐藏中工作,则可能没有准确地遵循MVVM模式<代码>中继命令
,在大多数情况下,用于代替单击事件。如果您仅在视图和代码隐藏中工作,则可能没有准确地遵循MVVM模式<代码>中继命令
,在大多数情况下,是用来代替点击事件的。我不同意与MVVM对齐的部分。我的观点是,如果逻辑只与视图相关,那么将其包含在代码中就可以了。因此,假设在启动关闭操作时不需要保存逻辑或返回逻辑(业务逻辑),那么将关闭逻辑放在代码中仍然可以遵守关注点分离。我不同意与MVVM对齐的部分。我的观点是,如果逻辑只与视图相关,那么将其包含在代码中就可以了。因此,假设在启动关闭操作时不需要保存逻辑或返回逻辑(业务逻辑),那么通过将关闭逻辑放在代码中,仍然可以遵守关注点分离。