仅适用于Alt的WPF AccessText按钮

时间:2014-07-11 21:06:58

标签: c# .net wpf xaml hotkeys

我有一个WPF窗口(.NET 4.0),它使用ShowDialog()打开另一个WPF窗口作为对话框。在该对话框窗口中,我有一个保存和取消按钮,我想分别连接alt + S和alt + C来保存和取消快捷方式。

按钮中有一个AccessText元素,在设计器中下划线后面的字母按钮上显示下划线。这在用户按下alt键时有效。当用户按下访问键时,快捷方式也会起作用。

但是,问题出在这里:

  • 访问密钥无需alt。一旦对话框打开,我可以只按 S C 而不用 alt 并按下按钮点击事件。如果焦点在输入控件(即文本框)上,那么它只适用于alt,这就是我想要的。但是,当表单具有焦点时,我只希望访问键与alt一起使用。

  • 第一次按alt后,除非您开始输入输入控件(即文本框),否则下划线将永远显示在按钮文本中。如果我再次按下alt,我会期望它们隐藏起来。这对WPF来说是正常的吗?

以下是从主窗口调用对话框的代码:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var w = new DialogWindow();
        w.ShowDialog();
    }

以下是对话框窗口中的XAML:

    <Window x:Class="WpfApplication2.DialogWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="122" Width="330" Topmost="True">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>

            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Some Setting:" Margin="10"/>
                <TextBox  Width="200" Margin="2" />
            </StackPanel>

            <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right">
                <Button Name="btnSave" Margin="10,10,5,10" Width="100" Height="25" Click="btnSave_Click" >
                    <StackPanel Orientation="Horizontal">
                        <Image Source="pack://siteoforigin:,,,/save_16xLG.png" />
                        <AccessText Text="_Save" />
                    </StackPanel>
                </Button>
                <Button Name="btnCancel" Margin="5,10,10,10" Width="100" Height="25" Click="btnCancel_Click">
                    <StackPanel Orientation="Horizontal">
                        <Image Source="pack://siteoforigin:,,,/action_Cancel_16xLG.png" />
                        <AccessText Text="_Cancel" />
                    </StackPanel>
                </Button>
            </StackPanel>
        </Grid>
    </Window>

以下是对话框窗口的代码:

    public partial class DialogWindow : Window
    {
        public DialogWindow()
        {
            InitializeComponent();
        }

        private void btnCancel_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
            this.Close();
        }

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
            this.Close();
        }
    }

1 个答案:

答案 0 :(得分:0)

ALT 时无法隐藏。当焦点更改为另一个控件时,它会隐藏。

如果您没有关注任何一个TextBox,那么您可以专注于Button。按照设计,当焦点在按钮上时,WPF会响应热键,即使您没有按 Alt

请参阅此答案以获取解决方法:

Access key getting selected even we did not press 'Alt' key in WPF