2017-12-29 102 views
0

GridLine이 있다고 가정하면 Grid입니다. Line의 너비가 항상 Grid의 너비와 동일하게하고 싶습니다. 그래서 나는 그들을 묶었습니다uwp 데이터 바인딩 : Grid.WidthProperty의 변경 내용을 청취하는 방법

<Page 
    x:Class="GeoDraw.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:GeoDraw" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:x1="using:System" 
    mc:Ignorable="d" Background="#FF262626" RequestedTheme="Dark" Loaded="Page_Loaded"> 

    <Grid x:Name="grid" BorderBrush="#FFE02121" Margin="20" Background="#FFD69696"> 
     <Line Stroke="White" Y1="20" Y2="20" X1="0" X2="{Binding ElementName=grid, Path=ActualWidth}" /> 
    </Grid> 
</Page> 

라인은 처음에는 그리드의 너비를 취하지 만 그리드의 크기를 변경해도 라인의 너비는 변경되지 않습니다. 어떻게 이러한 속성을 올바르게 바인딩 할 수 있습니까? 아마

답변

1

하지 당신이 찾고있는하지만 당신은 정말 그 동작을 원한다면 당신은 항상 당신의 그리드 SizeChanged 이벤트에 응답하는 이벤트 핸들러를 정의하고있는 라인을 X2 속성을 업데이트 할 수있는 구현 코드 숨김 :

<Grid x:Name="grid" BorderBrush="#FFE02121" Margin="20" Background="#FFD69696" SizeChanged="grid_SizeChanged"> 
    <Line x:Name="myline" Stroke="White" Y1="20" Y2="20" X1="0" X2="{Binding ActualWidth, ElementName=grid, Mode=OneTime}" /> 
</Grid> 

업데이트하여 이벤트 핸들러에서 Line

private void grid_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    myline.X2 = grid.ActualWidth; 
} 

단지 내가 바인딩 오류 표현의 어떤 종류를 얻을 수 있지만, ActualWidth depe에 결합되지 않음

ndency 속성이 다른 컨트롤에 대해 작동하지 않습니다 (예 : TextBox).

이유가 다른 것보다 ActualWidth 종속성 속성의 특정 동작을 가리키는 것이 분명해졌습니다. FrameworkElement 클래스의 ActualWidth 설명서 (ActualWidth)를 확인하는 동안이 방법을 지원하는 증거를 찾았습니다. 그것이 ActualWidthProperty 배면 필드가 있지만

는 ActualWidth는 속성 변경 통지를 발생시키지 않고 그 으로의 정규 CLR 속성 아닌 종속성 속성을 생각해야한다. , ActualWidth 그것을 변경하는 경우 (인해 비동기과 특성을 계산 실행 시간) 업데이트 을 게시하지 않습니다 바인딩 ElementName을의 목적

...

. Elementual 바인딩 의 바인딩 소스로 ActualWidth를 사용하지 마십시오. ActualWidth를 기준으로 업데이트가 필요한 시나리오가있는 경우 SizeChanged 처리기를 사용하십시오. 상기 Binding 정의에 회고

, 나는 UI가 먼저 표시 될 때 이유가 없기 때문에에만 X2 속성의 초기 기준을 계산하도록 OneTime에 기본 OneWay에서 바인딩 모드 변경 소스에서 "수정"을 알리는 신호가 없을 때 ActualWidth 값 수정을 "관찰"하려고하는 "낭비"리소스가 있습니다. 또는 항상 초기 값을 code-behind으로 설정할 수도 있습니다.

+1

정확히 !! 나는'TextBox'에 대해서도 궁금해했다. 지금은 이해. 많은 감사 앙드레 :) –