2017-12-29 91 views
0

GridLineGridの中にあるとします。 私はいつも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> 

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

私はバインディングエラー式のいずれかの種類を取得しますが、ActualWidth DEPEに結合していなかっただけでなく、イベントハンドラでごLineを更新たとえば、TextBoxのように、ndencyプロパティが他のコントロールで機能していませんでした。

理由が他のものではなく、ActualWidth依存関係プロパティの特定の動作を指していたことが明らかになりました。 FrameworkElementクラスのActualWidthドキュメント(ActualWidth)をチェックしている間に、このアプローチをサポートする証拠が見つかりました。

それはActualWidthPropertyバッキングフィールドがありますが、ActualWidthは プロパティの変更通知を上げていないと、それは、依存関係プロパティ通常のCLRプロパティ としてではなく考えるべきです。バインディングのElementNameの目的のために

...

それは(を、その非同期にし、実行時 な性質を計算)を変更した場合、ActualWidthはアップデート を投稿していません。 Elementualバインディング のバインディングソースとしてActualWidthを使用しないでください。 ActualWidthに基づく更新 を必要とするシナリオがある場合は、SizeChangedハンドラを使用します。上記Binding定義に振り返ってみると、私は理由がないので、UIが最初に示されている場合にのみX2プロパティの初期寸法を計算するために、OneTimeにデフォルトOneWayから製本モードを変更

ソースを変更したときに決して通知されないときにActualWidth値の変更を「観察」しようとするリソースを「無駄にする」ことです。 または、常に初期値をcode-behindに設定することもできます。

+1

正確に!私は 'TextBox'についても不思議だった。今分かります。多くの感謝アンドレ:) –

関連する問題