Kyl*_*Ren 9 c# data-binding wpf xaml
我AccessText今天正在上课.我无法确定使用此类的确切用法和结果.
如果您使用
AccessTextLabel并使用Target属性作为aTextBox,则TextBox在access key按下时将获得焦点.请参见下面的代码:
<StackPanel>
<Label Target="{Binding ElementName=txtbox}">
<AccessText>_first_second</AccessText>
</Label>
<TextBox Name="txtbox" Width="100" Height="50"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
如果您使用
AccessTextaLabel并使用Target属性作为aButon,则ButtonClick在access key按下时将执行该事件.
所以我的问题是
1.班级的决定性行为是
AccessText什么?如果非要预测它与其他类型的控件一样使用DataGrid,ComboBox,RadioButton?我怎么能确定预期的结果?这个班级为什么来自
FrameworkElement?它有什么应用程序FrameworkElement?对于仅指定Accesskeys等似乎更多一些
dev*_*xer 12
AccessText是一种FrameworkElement特殊类型的行为,TextBlock它允许单个下划线(_)后面的任何键盘字符充当访问键.
对于给定的控件,关联的访问键的行为取决于其OnAccessKey方法.OnAccessKey是一个虚拟方法UIElement,它提供以下定义:
protected virtual void OnAccessKey(AccessKeyEventArgs e)
{
this.Focus();
}
Run Code Online (Sandbox Code Playgroud)
因此,任何不覆盖定义的OnAccessKey定义的控件都UIElement将保持默认行为,即当按下访问键时控件将被聚焦.
ButtonBase,Button继承自,具有以下定义OnAccessKey:
protected override void OnAccessKey(AccessKeyEventArgs e)
{
if (e.IsMultiple)
base.OnAccessKey(e);
else
this.OnClick();
}
Run Code Online (Sandbox Code Playgroud)
因此Button,继承的默认行为和其他控件ButtonBase将使控件成为焦点,如果IsMultiple为true,否则,它将引发click事件.(IsMultiple如果访问密钥与多个密钥相关联,则为true UIElement.)
考虑到这一背景,以下是您具体问题的答案:
AccessText用作控件的元素的确定行为ContentPresenter是将单个下划线后面的第一个字母注册到AccessKeyManager,这将在OnAccessKey按下键时调用控件的方法.知道这将对特定控件做什么需要知道该控件的哪个定义OnAccessKey有效.如果其继承链中没有覆盖,则按下访问键将使控件成为焦点.如果存在覆盖,则行为将取决于覆盖方法的定义.这可以通过实验,阅读相关文档或检查源代码来确定.
AccessText是FrameworkElement的,同样的原因TextBlock是FrameworkElement.它具有可视化形式并占据布局系统在相对于其定位其他元素时需要考虑的空间.此外,FrameworkElements允许样式,并且它们拥有自己的DataContext属性,这允许绑定场景,否则将无法实现.如果AccessText不是FrameworkElement,那将是不必要的限制并阻止WPF开发人员可能具有的合理(尽管可能是罕见的)用例.
编辑
这是一个花哨的电源按钮的例子,它展示了AccessText成为一个有用的功能FrameworkElement:
<Grid>
<Button Width="150"
Height="35"
Command="{Binding PowerCommand}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Status" />
<Rectangle Margin="5,2,0,0"
Width="10"
Height="10"
Fill="{Binding PowerFill}" />
<AccessText Margin="25,0,0,0"
Text="{Binding PowerText}" />
</StackPanel>
</Button>
</Grid>
Run Code Online (Sandbox Code Playgroud)
这导致(按下之后Alt):
单击按钮或按Alt+后S,视图模型将通过更改Text和响应命令Fill,从而产生以下结果:
再次单击或使用访问键将返回到第一个状态.
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |