【问题标题】:WPF AccessText In Button Only For Alt按钮中的 WPF AccessText 仅适用于 Alt
【发布时间】:2014-09-02 14:24:19
【问题描述】:

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

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

但是,问题如下:

  • 访问密钥无需 alt 即可工作。对话框打开后,我可以只按字母 SC 而没有 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();
        }
    }

【问题讨论】:

    标签: c# .net wpf xaml hotkeys


    【解决方案1】:

    ALT 时不会隐藏。当焦点切换到另一个控件时它会隐藏。

    当您在任何一个文本框中都没有焦点时,您将焦点放在按钮上。根据设计,当焦点位于按钮上时,WPF 会响应热键,即使您没有按 Alt

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

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

    【讨论】:

    • 我尝试添加第二个文本框,当通过鼠标单击将焦点从一个控件切换到另一个控件时,下划线会隐藏,但通过 Tab 切换焦点无效。此外,如果我按下“S”或“C”,表单仍会立即关闭,无论我是否按下了 ALT,如果其中一个文本框没有焦点。
    • 解决方法的链接提供了我需要的答案,以防止访问键工作,除非按下 ALT。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2013-11-23
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多