2013-03-14 3 views
0

UIElement을 기반으로 클래스를 만들었습니다. 내 의도는 직접 렌더링하여 OnRender을 재정의하는 것입니다. 렌더링은 정상적으로 작동합니다. 다음으로 포커스 관리를 구현하고 LIFE의 다른 측면을 계속 수행하지만 GotFocus을 무시하고 Me.Focus()를 호출하면 한 가지 작업 만 수행되지 않습니다. 내 컨트롤을 하나의 다른 컨트롤 - TextBox이있는 창에 배치하고 클릭하면 단일 생각을 내지 않습니다. Tab 키도 포커스를 설정하지 않으며 TextBoxAcceptsTab 음수입니다. 컨트롤이 포커스가 맞았는지 아닌지를 실제로 알려주려면 OnRender에 어떻게 든 포커스를 시각화해야 할 것입니다.하지만 먼저 포커스를받을 수 있도록해야합니다. 이것이 바로 내가 투쟁하는 곳입니다. 너 나 좀 도와 줄래?UIElement 파생 - 포커스 수신 방법

P. 태그 UIElement을 만들 충분한 평판이 없기 때문에 태그를 비워 두는 것이 바보 같은 것처럼 보였기 때문에 나는 이것을 FrameworkElement으로 태그했습니다.

+0

'UIElement를 기반으로 클래스를 만들었습니다. 의도적으로이 클래스를 렌더링하여 OnRender를 재정의하는 것입니다. '- 너는 이걸 확실히 할거 니? 'Templates'와'Styles'을 사용하여 구현할 수없는 컨트롤은 무엇입니까? –

+0

오, 저는 컨트롤이 텍스트를 렌더링하지만 TextBox를 파생시킬 수 없습니다. 왜냐하면 텍스트의 일부분을 다르게 렌더링 할뿐만 아니라 TextBox를 사용하여 해결할 수 없기 때문입니다. – user2171565

+0

대신 FrameworkElement에서 파생하는 것이 더 나을 것이라고 생각합니다. –

답변

1

대답에 내 의견을 변환 :

난 당신이 아마 대신 FrameworkElement에서 파생 더 나을 거라고 생각합니다.

+0

이것은 올바른 대답입니다. 다시 한 번 감사드립니다. 그러나 FrameworkElement는 템플리트 기능을 제공하지 않으며 컨트롤에 상속 (Foreground) 및 글꼴 크기 (FontSize)와 같은 많은 기능이 포함되어 있으므로 컨트롤에 상속을 허용하지 않습니다. 따라서 FocusVisualStyle을 설정하는 것은 파선 사각형을 제거하는 방법이 아닙니다. OnRender 재정의에서 기본 클래스에 대한 호출을 제거하지 않습니다. – user2171565

+0

좋아, 알아 냈어. FocusVisualStyle로 null을 설정하는 것은 도움이되지 않지만 빈 스타일을 설정하는 것은 도움이되었습니다. FocusValueStyleProperty.OverrideMetadata (typeof (CustomControl1), new FrameworkPropertyMetadata (new Style() {TargetType = typeof (Control)}));이 컨트롤은 스타일의 TargetType을 Control으로 설정하는 것만 큼주의해야합니다. – user2171565

+0

네,하지만'FocusVisualStyle'은'FocusVisual'을 가리키고 있습니다. 이것은'FrameworkElement'가 아닌'Control'입니다. 그래서'TargetType = "Control"'을 사용해야합니다. –