CHashtag

[C# WPF] 다른 Control Property Binding (다른 컨트롤 속성 바인딩) 본문

C#/WPF

[C# WPF] 다른 Control Property Binding (다른 컨트롤 속성 바인딩)

HyoSeong 2021. 12. 3. 11:12
반응형

안녕하세요.

 

오늘은 WPF의 핵심 기능인 Binding을 이용하여 다른 Control의 Property(Button이 Griddml Width속성을)를 Binding하는 방법에 대해 알아보도록 하겠습니다.

 

자기자신의 다른 속성값 얻기


<TextBlock Width="250" Text="{Binding Path=Width, RelativeSource={RelativeSource Mode=Self}}"/>
<!-- Text: 250 -->

 

자기자신의 조상(부모) Control의 값 얻기


<StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding Path=Orientation, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackPanel}}}"/>
    <!-- Text: Horizontal -->
</StackPanel>

이때 같은 type의 부모가 둘 이상이라면 어떻게 될까요?

<StackPanel Orientation="Vertical">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Path=Orientation, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackPanel}}}" FontSize="20"/>
        <!-- Text: Horizontal -->
    </StackPanel>
</StackPanel>

 

이런 때에는 본인과 가장 인접한 조상을 선택하도록 되어있습니다.

그렇다면 제일 인접한 조상이 아니거나 아예 조상이 아닐 경우에는 어떻게 해야 할까요?

x:Name으로 Control 찾기


아래 코드와 같이 x:Name 을 이용하면 해당 이름을 가진 Control에 바로 접근할 수 있습니다.

<StackPanel x:Name="Panel1" Orientation="Vertical">
    <StackPanel x:Name="Panel2" Orientation="Horizontal">
            <TextBlock Text="{Binding Path=Orientation, ElementName=Panel}"/>
            <!-- Text: Vertical -->
        </StackPanel>
</StackPanel>
<TextBlock Text="{Binding Path=Orientation, ElementName=Panel2}"/>
<!-- Text: Horizontal -->

 

 

감사합니다.

반응형