WPF:对话框中的重复访问键

时间:2013-09-19 11:50:34

标签: wpf xaml checkbox access-keys shortcut-key

我有一个包含几个CheckBoxes的用户控件。每个CheckBox都有一个唯一的访问密钥。 现在,如果我在对话框中使用此用户控件的多个实例,则访问键无法正常工作。当按下访问键时,焦点会正确转到复选框,但不会选中或取消选中该复选框。

为了说明这一点,假设你有这个XAML:

<Window x:Class="WpfApplication1.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">
    <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>

            <CheckBox Grid.Row="0" Content="_First" Margin="5"/>
            <CheckBox Grid.Row="1" Content="F_urst" Margin="5"/>
        </Grid>
</Window>

如果您运行上述代码,则会在Alt + F或Alt + U上选中/取消选中复选框。

现在让我们说你有这个XAML:

<Window x:Class="WpfApplication1.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">
    <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>

            <CheckBox Grid.Row="0" Content="_First" Margin="5"/>
            <CheckBox Grid.Row="1" Content="_Furst" Margin="5"/>
        </Grid>
</Window>

这两个复选框都有相同的访问键,即'F'。现在,如果我们执行Alt + F,焦点将迭代复选框而不选择它们。我希望像往常一样选中或取消选中复选框。

有谁知道如何解决这个问题?甚至更好的想法来处理这种情况?

PS:我知道在同一个对话框中有重复的访问键是没有意义的,但上面的代码仅用于说明目的。我的问题(正如我在上面解释的那样)是我在对话框中多次使用用户控件,因此重复控件中的访问键。

1 个答案:

答案 0 :(得分:0)

这种行为很正常。你会如何提出任何不同的方案?如果两个控件具有相同的访问键,则通常选择控件的键现在在两者之间交替。与所有Checkbox控件一样,您只需按空格键即可选择或取消选择它。因此解决方案是使用访问键选择控件,并使用空格键选中或取消选中它。

更新&gt;&gt;&gt;

就个人而言,我不会试图绕过这种行为,而是宁愿向用户解释系统的实际运作方式。如果真的困扰你,可以找到一个解决方法,但这将是很多工作,在我看来,不值得。

例如,您可以向您的Dialog构造函数添加代码,该代码将动态设置定义访问密钥的所有属性。但问题是,在Dialog之外,您需要记录当前打开的其他Dialog个控件使用了哪些字母为每个人的属性。

如果你选择徘徊这条孤独的道路,祝你好运。