2013-03-14 62 views
0

我创建了一个基于UIElement的课程,我的目的是让它自己覆盖OnRender。渲染工作正常。接下来,我想实施重点管理,并继续其他方面的生活,但重写GotFocus并调用Me.Focus()在它不做一件事。我把我的控制权放在一个窗口上,并使用另一个控件 - TextBox,然后点击它并不会做任何事情。 Tab也不设置焦点,TextBoxAcceptsTab为负数。我知道我必须在OnRender中以可视化的方式将焦点可视化,以真实地分辨控制权何时关注或不关注,但首先我需要让焦点获得焦点,这就是我努力的方向。你能帮我解决吗?派生UIElement - 如何获得焦点

P.S.我用FrameworkElement标记了这个标记,因为我没有足够的信誉来创建标记UIElement并且让标记为空似乎是一件愚蠢的事情。

+0

'我创建了一个基于UIElement的类,我的意图是让它自己重写OnRender。 ' - 你完全确定你需要这个吗?你的控制是什么,它不能用'Templates'和'Styles'来实现? – 2013-03-14 20:43:32

+0

呵呵,我是,我的控件会渲染文本,但我甚至无法派生TextBox,因为我不仅需要以不同方式渲染文本的某些部分,还要移动它们,这是无法使用TextBox解决的。 – user2171565 2013-03-14 20:44:47

+0

我认为你可能会更好地从'FrameworkElement'派生出来。 – 2013-03-14 20:45:49

回答

1

转换我的评论到一个答案:

我想你也许会更好,从FrameworkElement,而不是获得。

+0

这是正确的答案,再次感谢。但是,FrameworkElement不提供模板功能,它们随Control一起提供 - 还有许多其他功能,如Foreground和FontSize,我不希望Control继承。所以设置FocusVisualStyle不是摆脱虚线矩形的一种方法。在OnRender覆盖中,都不会去除对基类的调用。 – user2171565 2013-03-14 21:17:45

+0

好的,我明白了。将null设置为FocusVisualStyle没有帮助,但设置了空白样式。所有你需要注意的是将样式的TargetType设置为Control,即使你的控件来自FrameworkElement:FocusVisualStyleProperty.OverrideMetadata(typeof(CustomControl1),new FrameworkPropertyMetadata(new Style(){TargetType = typeof(Control)})); – user2171565 2013-03-14 21:24:28

+0

是的,但'FocusVisualStyle'指的是'FocusVisual',它是一个'Control',而不是'FrameworkElement'本身,这就是为什么你必须'TargetType =“Control”'。 – 2013-03-14 21:26:34