2

我在 WPF 客户端 C# 应用程序中有一个简单的菜单,用户应该一次只能选择一项。如果选择其中一项,则应禁用其他项,直到操作完成。

例如,我有以下菜单

 <MenuItem Header="Help">
            <Separator></Separator>
            <MenuItem Header="User Manual.." Click="UsageDocMenuItem_Click" />
            <Separator></Separator>
            <MenuItem Header="Login"  Click="LoginItem_Click"/>
            <Separator></Separator>
            <MenuItem Header="About"  Click="AboutMenuItem_Click"/>
            <Separator></Separator>
        </MenuItem>`

如果用户点击登录,用户手册和关于应该被禁用,直到登录触发的操作完成。

可以使用哪种 C# 设计或代码方法来实现这一点?

4

4 回答 4

1

我找到了解决方案。我不确定我们是否可以使用所选菜单项的 ID,因为我想一次禁用整个菜单。我可以这样:

<MenuItem Header="Help" Name="help">
        <Separator></Separator>
        <MenuItem Header="User Manual.."  Click="UsageDocMenuItem_Click" />
        <Separator></Separator>
        <MenuItem Header="Login"  Click="LoginItem_Click"/>
        <Separator></Separator>
        <MenuItem Header="About"  Click="AboutMenuItem_Click"/>
        <Separator></Separator>
    </MenuItem>`

void UsageDocMenuItem_Click()
{
    help.IsEnabled = false;
    //Do stuff
    help.IsEnabled = true;
}

通过为菜单项命名,我可以在代码中的任何位置访问它。

于 2013-10-08T10:56:05.360 回答
1

所以意味着有菜单项,当用户单击其中一个时,例如:登录然后直到操作完成为止登录应该被启用,其他菜单项应该被禁用。

您需要创建一个按钮单击事件,并且在同一事件中您需要编写代码来查找其他菜单项并禁用它们。

Button_click Event(...)
{
//...disable other menu items
}
于 2013-10-07T08:21:54.800 回答
1

假设您使用的是“WPF”,您可以使用命令和包含这些命令的 ViewModel 来确定该命令是否启用。这样,您的 ViewModel 也知道您所处的“模式”。

于 2013-10-07T08:23:55.373 回答
0

你的问题不是很详细。如果您只需要基本的逻辑/概念,那么您可能只需要这样的方法吗?:

public void DisableAllButOneMenuItem(int idOfSelectedMenuItem)
{
    // Code that disables all itmes, 
    // then code that enables a single item again.
}
于 2013-10-07T07:55:03.137 回答