如何接受焦点 C# WPF UserControl

6

我正在尝试创建一个日期编辑UserControl,但是使用TextBlock而不是TextBox,因为我想要一个单一的输入上下文,而不是管理六个可能的焦点。

如何接受焦点?我尝试将Focusable设置为TRUE,但似乎还不够。我还需要做什么?

1个回答

7
听起来你需要将 KeyboardFocus 设置到元素上。
例如:
<UserControl x:Class="MyControl"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
       mc:Ignorable="d" 
       d:DesignHeight="300" d:DesignWidth="300"
       FocusManager.IsFocusScope="True"
       FocusManager.FocusedElement="{Binding ElementName=mytextBlock}">
    <Grid>
       <TextBox Name="mytextBlock" />
    </Grid>
</UserControl>

或者在代码后端:

FocusManager.SetFocusedElement(this, mytextblock);
Keyboard.Focus(mytextblock);

1
现在这不是很奇怪吗 - 你没有回答我想问的问题,但你已经回答了我所问的问题,并给出了我需要的答案。谢谢。嘿,sa_ddam,你是否遇到过这样的问题:在VS2012设计器中将用户控件作为小部件单击时会抛出空引用异常,但在运行时却可以正常工作? - Peter Wone
是的,我在新的VS2012设计器中遇到了许多问题,大部分时间它会抛出随机错误并且设计器无法加载,我不得不关闭xxxx.xaml并重新打开以解决。希望他们在SP1中解决这个问题,因为我记得在发布SP1之前,VS2010也有类似的问题(没有VS2012那么糟糕,但确实发生了)。我想这就是为什么很多人使用Blend的原因,但我不喜欢Blend添加到我的代码中的XAML膨胀。 - sa_ddam213

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接