0

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

为了说明这一点,假设您有这个 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:我知道在同一个对话框中有重复的访问键没有意义,但上面的代码仅用于说明目的。我的问题(正如我在顶部所解释的)是我在对话框中多次使用用户控件,因此控件中的访问键被重复。

4

1 回答 1

0

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

更新>>>

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

例如,您可以将代码添加到您的Dialog构造函数中,该代码将动态设置定义访问键的所有属性。然而,问题在于,在 之外,您需要记录当前打开Dialog了多少其他控件以及每个控件的哪些属性使用了哪些字母。Dialog

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

于 2013-09-19T12:10:39.783 回答