【问题标题】:How to accept focus C# WPF UserControl如何接受焦点 C# WPF UserControl
【发布时间】:2013-01-14 08:50:03
【问题描述】:

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

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

【问题讨论】:

    标签: wpf user-controls focus


    【解决方案1】:

    听起来你需要将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>
    

    或者在codeBehind中:

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

    【讨论】:

    • 现在并不奇怪——你还没有回答我想问的问题,但你已经回答了我确实问过的问题,而且我确实需要一个答案。谢谢。嘿 sa_ddam 你有没有遇到过用户控件的问题,它在运行时工作正常,但是当你在 VS2012 设计器的 WPF 窗口中单击它作为小部件时会引发空引用异常?
    • 是的,我在使用新的 VS2012 设计器时遇到了很多问题,大多数时候它会抛出随机错误并且设计器不会加载,我必须关闭 xxxx.xaml 并重新打开才能解决。希望他们在 SP1 中解决它,因为我记得在 SP1 发布之前与 VS2010 有类似问题(不如 VS2012 糟糕,但它确实发生了)。我想这就是为什么这么多人使用 blend 的原因,但我不喜欢 xaml bloat blend 添加到我的代码中。
    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多