2011-10-07 3 views
1

저는 WPF UserControl을 가지고 있습니다. 이것은 다른 것들과 함께 쓰이는 레이블입니다. 예 : TextBox의 라벨 나는이처럼 LabeledControl 마크 업 내부에서이 텍스트 상자를 배치 할 : 나는이 작업을 수행 할 수UserControl 인스턴스 내에 내용 포함하기

<LabeledControl Label="First name"> 
    <TextBox Binding="{FirstName}" /> 
</LabeledControl> 

이유는 방식으로 컨트롤 스타일을하고 자신의 레이블을 찾습니다.

확실한 방법을 찾을 수 없습니다. 나는 이것이 올바른 방법으로 접근하고 있는가? 나는 대신에 템플릿을보고 있어야할까요?

답변

3

Header (레이블) 및 Content (텍스트 상자) 속성을 지정할 수있는 내장형 HeaderedContentControl을 사용하는 것이 더 좋은 옵션이라고 말하고 싶습니다.

<Style x:Key="MyLabelledItemStyle" TargetType="HeaderedContentControl"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="HeaderedContentControl"> 
       <StackPanel Orientation="Horizontal"> 
        <ContentControl Content="{TemplateBinding Header}" Margin="2" /> 
        <ContentControl Content="{TemplateBinding Content}" Margin="2" /> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

이 예는 단지 수평으로 StackPanel에 두 개의 구성 요소를 연결합니다,하지만 당신은 필요한 경우 더 복잡한 뭔가를 할 수 :

그런 다음 모양을 변경하기 위해 HeaderedContentControl에 대한 ControlTemplate을 지정할 수 있습니다.

그런 다음 다음과 같이 XAML에서 이것을 사용할 수 있습니다

<HeaderedContentControl Style="{StaticResource MyLabelledItemStyle}" Header="First Name"> 
    <TextBox Text="{Binding FirstName}" /> 
</HeaderedContentControl>