2011-08-08 3 views
1

이것은 매우 간단 해 보이지만 사용자 정의 컨트롤에 추가하려는 동작과 관련하여 웹에서 아무 것도 찾을 수 없습니다.컨트롤의 기본 단추 감지

내 사용자 지정 컨트롤은 선택 목록이있는 텍스트 상자입니다. 사용자가 입력 한 텍스트가 목록에 포함되어 있지 않으면 사용자가 올바른 선택을 할 수있는 목록이있는 팝업이 나타납니다.

경우에 따라 사용자 정의 컨트롤이 추가 된 컨테이너의 기본 단추가있을 수 있습니다. 그렇다면, 입력 키를 눌렀을 때, 텍스트가 틀리면 팝업이 표시되어야합니다. 입력시 기본 단추가 없으면 텍스트가 틀린 경우에도 아무 것도 일어나지 않아야합니다.

이 동작을 만들려면 컨테이너에서 defaultbutton의 존재를 감지 할 수 있어야하며 cutom 컨트롤의 C# 코드 내에서 수행해야합니다.

설명이 명확 해 주시기 바랍니다. 미리 감사드립니다.

답변

0

나는 사용자 정의 컨트롤에서 있었다 다른 컨트롤 내가 같이 가야하기로 결정했습니다 알 수 없습니다 이후 :

내가 부모를 갖는 FrameworkElement.Parent 를 사용하여 첫 번째 부모를 찾기 위해 재귀 함수를했다, 나는 걸릴 수 있습니다 포함 된 모든 컨트롤을 살펴보십시오. 버튼을 보자 마자 IsDefault인지 확인해야했습니다. 여기서는 VisualTreeHelper GetChildrenCount(DependencyObject obj_Parent)GetChild(DependencyObject obj_Parent, int childIndex)을 사용했습니다. 재귀는 다시 한번 ...

더 많은 코드를 실행하더라도 아주 잘 작동합니다.

1

MVVM 접근 방식과 명령 패턴 구현에 대해 생각해 보셨습니까? 보기 모델이 선택 항목을 알고있는 한 기본 단추를 명령에 바인딩 할 수 있습니다. 커맨드 CanExecute 핸들러가 false를 반환하는 한, 즉, 적절한 선택이 입력/선택되지 않은 한, 버튼은 디스 에이블되고 사용자가 enter를 눌러도 응답하지 않을 것이다.

+0

내가 잘못 설명했다고 생각합니다. 한쪽에는 기본 단추가 있는데 거기에는 없을 수도 있고 다른 것도 할 수 있습니다. 다른면에서는 적절한 값을 요구하는 사용자 지정 컨트롤이 있으며 사용자가 적절한 값을 선택하지 않으면 남겨 둘 수 없습니다. 사용자가 컨트롤을 벗어나서 잘못된 값을 입력하려고하면 목록이 표시됩니다. 이러한 행동은별로 연관되어 있지 않습니다. 요점은 기본 단추가있을 때 입력시 텍스트가 잘못되었을 때 목록을 시작하는 것입니다. 기본 단추가 없으면 아무런 영향을 미치지 않으므로 입력시 목록이 표시되지 않습니다. – Fjodr

관련 문제