내용 보기

작성자

관리자 (IP : 172.17.0.1)

날짜

2020-07-10 01:59

제목

[WPF] RelativeSource바인딩 Code상으로 구현하기


xaml

<ContentControl Name="vv" Width="{Binding RelativeSource={RelativeSource FindAncestor, 
                                          AncestorType=UserControl, 
                                          AncestorLevel=1},    
                                         Path=ActualWidth}"
                          Height="{Binding RelativeSource={RelativeSource FindAncestor, 
                                           AncestorType=UserControl, 
                                           AncestorLevel=1},
                                        Path=ActualHeight}"    
                          Canvas.Left="0"
                          Canvas.Top="0"
                          Style="{StaticResource DesignerItemStyle}">
    <Border BorderBrush="Red" BorderThickness="5" CornerRadius="5" Margin="5,5,5,25">
        <TextBox Name="TextBoxCtl" Margin="1,1,0,0" Text="Text!" MouseDoubleClick="TextBoxCtl_MouseDoubleClick" />
    </Border>
</ContentControl>
cs

위 처럼 ContentControl컨트롤의 Width값과 Height값이 RelativeSource바인딩 걸려 있는 것을 코드 상으로는 다음과 같이 구현 하면 된다.

* 위 바인딩은 ContentControl컨트롤의 사이즈를 부모의 UserControl사이즈와 항상 동일하게 처리 하기 위한 바인딩

cs

var binding = new Binding
            {
                RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(UserControl), 1),
                Path = new PropertyPath("ActualWidth"),
            };
 
System.Diagnostics.PresentationTraceSources.SetTraceLevel(binding, System.Diagnostics.PresentationTraceLevel.High);
BindingOperations.SetBinding(vv, WidthProperty, binding);
cs


출처1

출처2