按钮中的 WPF AccessText 仅适用于 Alt
Posted
技术标签:
【中文标题】按钮中的 WPF AccessText 仅适用于 Alt【英文标题】:WPF AccessText In Button Only For Alt 【发布时间】:2014-09-02 14:24:19 【问题描述】:我有一个 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】:按 ALT 时不会隐藏。当焦点切换到另一个控件时它会隐藏。
当您在任何一个文本框中都没有焦点时,您将焦点放在按钮上。根据设计,当焦点位于按钮上时,WPF 会响应热键,即使您没有按 Alt。
请参阅此答案以了解解决方法:
Access key getting selected even we did not press 'Alt' key in WPF
【讨论】:
我尝试添加第二个文本框,当通过鼠标单击将焦点从一个控件切换到另一个控件时,下划线会隐藏,但通过 Tab 切换焦点无效。此外,如果我按下“S”或“C”,表单仍会立即关闭,无论我是否按下了 ALT,如果其中一个文本框没有焦点。 解决方法的链接提供了我需要的答案,以防止访问键工作,除非按下 ALT。谢谢!以上是关于按钮中的 WPF AccessText 仅适用于 Alt的主要内容,如果未能解决你的问题,请参考以下文章
WPF:如何防止讲述人读取 AccessText 元素的下划线字符?
WPF:为啥我不应该在 ControlTemplate 中使用 TemplateBinding Margin - Margin 是不是仅适用于元素的容器?