如何建立我自己的关闭按钮?

时间:2016-05-16 12:59:16

标签: c# wpf xaml mvvm

我有一个带MVVM的wpf应用程序。我正在尝试建立自己的关闭按钮。根据这个答案Creating a custom Close Button in WPF,我在 View (xaml.cs)代码中添加了一个按钮事件处理程序。但是,它无法识别Close();调用(上下文中不存在 - 无法解析符号)。

此外,我尝试了另一个答案,并将CommandCommandParameter添加到我的按钮的xaml中。但背后的功能并没有得到点击。在使用RelayCommand的{​​{3}}中,我的wpf也无法识别RelayCommand。然后How to bind Close command to a button说我必须自己写(真的吗?)。我记得有一种类似于为按钮设置事件处理程序并调用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>

1 个答案:

答案 0 :(得分:2)

在事件处理程序中无法识别Close,因为当前类中可能没有名为Close的方法。如果要调用主窗口的close方法,可以使用:

private void closeButton_Click(object sender, RoutedEventArgs e)
{
 Application.Current.MainWindow.Close();    
}

上面不是一个很好的方法,并不符合MVVM模式。这与你的第二个问题有关。没有看到代码的剩余部分,很难说为什么命令绑定不起作用。我猜你没有正确连接命令才能开火。您需要确保已创建RelayCommand实例并正确设置了命令属性。