2009-07-14 5 views
1

스타일 및 데이터 템플릿과 같은 다양한 위치에서 텍스트 상자를 선언하는 응용 프로그램이 있습니다. 이제는 포커스를 가져 오거나 잃는 모든 텍스트 상자의 표준 동작을 변경해야하는 상황에 처해 있습니다.TextBox의 표준 동작 변경?

어떻게해야할까요?

저는 두 가지 해결책을 생각했습니다. 하나는 TextBox에서 새로운 클래스를 파생시키는 것이고, 이는 일반적으로 눈살을 찌푸리게됩니다. 다른 하나는 EventSetters를 사용하는 일종의 스타일을 만드는 것이지만, 응용 프로그램의 스타일과 데이터 템플릿에는 코드 숨김 파일이 없기 때문에 이벤트가 적절한 이벤트 핸들러를 찾는 방법을 모르겠다.

+1

: 왜에 일반적으로 눈살을 찌푸렸다 텍스트 상자에서 파생되는

나는 유효성 검사를 수행하는 사용자 컨트롤의 텍스트 상자를 만들 동일한 방법을 사용했다? – Tim

+1

@ 팀 : 나는 똑같은 것을 궁금해하고 있었다. – Treb

+0

제 생각에 새로운 클래스를 파생시킴으로써 얻을 수있는 기능 중 대부분은 아니지만 실제로는 이벤트를 통해 수행 될 수 있다는 것이 인상적이었습니다. – djcouchycouch

답변

2

당신은 다음과 같은 주요 속성을 사용하는 모든 텍스트 상자에 적용되는 스타일을 만들 수 있습니다

<Style x:Key={x:Type TextBox}> 
... 
</Style> 

당신은 다음 텍스트 상자의 템플릿 속성을 수정하고 OnGotFocus 및 OnLostFocus에 특별한 동작을 추가 할 트리거를 사용 할 수 있습니다 이벤트. 다음과 같이

+0

나를 위해 일합니다. 그런 식으로 하나의 스타일을 선언하고 다른 다른 리소스를 수정하지 않고 모든 텍스트 상자에 영향을 주도록 할 수 있습니다. – djcouchycouch

0

정상적인 상황에서 나는 또한 TextBox를 서브 클래 싱 할 때 눈살을 찌푸렸다. 이 경우 TextBox의 비헤이비어를 변경하기 때문에 하위 클래스가 최상의 옵션 일 수 있습니다.

+2

TextBox (또는 다른 컨트롤)를 서브 클래 싱하는 것이 왜 나쁜 아이디어 일 수 있는지 설명해 주시겠습니까? – Treb

2

피드백을 바탕으로, 내가 사용 연결된 동작을 권하고 싶습니다 :

<TextBox b:TextBox.SuppressOnFocus="True"/> 

첨부 된 동작을 구현 단순히의 GotFocus 및 LostFocus 명확한에 부착 것이다/바인딩 적절를 다시 적용합니다.

+0

내 텍스트 상자는 지속적으로 업데이트되는 속성에 데이터 바인딩됩니다. 텍스트 상자에 포커스가있을 때마다 사용자가 무언가를 입력하려고해도 텍스트 상자의 텍스트가 속성 값으로 설정됩니다. GotFocus 및 LostFocus 이벤트는 사용자가 입력하는 동안 일시적으로 데이터 바인딩을 사용하거나 사용하지 않도록 설정합니다. – djcouchycouch

+0

첨부 된 동작이 사용자의 요구에 더 적절하게 들립니다. 내 소식 업데이트 중 ... –