2011-11-20 3 views
8

XAML 파트와 코드 숨김 파트로 구성되는 사용자 정의 컨트롤을 구성했습니다. 이제 이전의 기능 중 일부를 공유하지만 모양이 다르며 코드 숨김에 추가 기능이있는 다른 사용자 정의 컨트롤을 만들어야합니다.WPF의 사용자 컨트롤 확장

첫 번째 아이디어는 두 가지 컨트롤 유형의 공통 기능을 모으기위한 인터페이스를 만드는 것이 었습니다. 이것이 올바른 방법인가요? 그리고 내가 갖고 있어야하는 다른 XAML 부분을 어떻게 관리 할 수 ​​있습니까? 어떤 조언을 환영합니다.

+0

코드 비하인드가 문제가 아니라 컨트롤 인 것처럼 들립니다. –

+0

리치, 너 무슨 뜻이야? – Tilvia

+1

비주얼을 바꾸고 싶지만 같은 비헤이비어를 사용하거나 추가하는 것처럼 들립니다. 모든 행동 코드가 코드 숨김에 갇히고 다시 사용할 수 없으므로 문제가 발생합니다.MVVM과 같은 발표자 패턴에 익숙하십니까? –

답변

9

나는 내 다른 상황에 마주 친 다른 사람들에게 유용 할 수 있다고 생각되는 또 다른 공헌을 추가하고 싶습니다.

컨트롤을 만들려는 컨트롤이 특별히 복잡하지 않은 것으로 생각되는 다른 가능한 솔루션은 공유하려는 공통 기능을 포함하는 기본 사용자 컨트롤을 만드는 것입니다. 이러한 컨트롤은 작성됩니다 전적으로 C#. 사실 XAML과 코드가 뒤섞인 사용자 정의 컨트롤에서 상속을 허용합니다.

class MyExtendedControl : MyBaseControl 

: 당신은 또한 다음과 같은 지정해야합니다 뒤에 상속 된 컨트롤의 XAML보다는

<UserControl> ... </UserControl> 

필요에서 당신은 코드에서

<MyProject: MyBaseControl x:Class="MyProject.MyExtendedControl"> ... </MyProject: MyBaseControl> 

하고있을 것이다 희망이 도움이됩니다.

2

사용자 정의 컨트롤은 WPF에서 상속에 적합하지 않으므로 작동하도록 해킹을 할 수 있지만 전체적으로 사용자 정의 컨트롤을 사용하는 것이 더 나을 것입니다. 이 기술을 사용하여 상속 된 컨트롤에 대해 다른 XAML을 지정하는 것이 더 쉽습니다. 사용자 지정 컨트롤을 시작하는 가장 쉬운 방법은 프로젝트에 "사용자 지정 컨트롤 (WPF)"유형의 새 항목을 추가하는 것입니다.이 컨트롤이 컨트롤을 추가하고 XAML이 Themes/generic.xaml에 추가됩니다.

이 컨트롤에서 상속하는 가장 쉬운 방법은 다른 새 사용자 지정 컨트롤 (WPF)을 추가 한 다음 컨트롤 대신 부모 컨트롤에서 상속하도록 코드를 변경하는 것입니다.

+0

그래서, 내가 올바르게 이해할 수 있다면, 일반적인 기능이 포함 된 세 번째 컨트롤에서 상속받은 두 개의 사용자 지정 컨트롤을 가져야한다는 것입니다. – Tilvia

+1

맞습니다. 일반적인 기능 중 몇 가지만 사용하는 경우 다른 옵션은 UserControls를 계속 사용하고 첨부 된 속성이나 동작을 일반적인 기능에 사용하는 것입니다. –

2

조각을 쉽게 나눌 수 있도록 여러 가지 방법으로 분할 할 수 있습니다.

MVVM은 주석에서 언급했듯이 입력 컨트롤을 로직과 분리하기 위해 데이터 바인딩을 사용합니다. INotifyPropertyChanged를 구현하는 적절한 클래스를 사용자가 제어하는 ​​DataContext에 설정함으로써 동작을 변경할 수 있습니다. DataContext 클래스 또는 ViewModel은 사용간에 너무 큰 차이가없는 경우 입력의 다른 부분을 표시하거나 숨기도록 Visibility 속성을 구현할 수 있습니다.

기능을 분리하는 또 다른 방법은 집계입니다. StackOverflow 269496

일반적인 기능을 구현하는 작은 컨트롤을 만든 다음 더 작은 컨트롤 (예 : 더 큰 컨트롤)을 결합하여 더 큰 컨트롤을 만들 수 있습니다. 집계는 코드 숨김 및 데이터 바인딩 방법 모두에 적용됩니다.