3

これをサイダーにペーストします。

<Grid x:Name="Grid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="ColumnDefinition"/>
    </Grid.ColumnDefinitions>
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock Text="{Binding ActualWidth, ElementName=Grid}"/>
        <TextBlock Text="{Binding ActualWidth, ElementName=ColumnDefinition}"/>
    </StackPanel>
</Grid>

さあ、実行してください。2 番目TextBlockは 0 を示していますが、そうすべきではありませんよね? 回避策

4

3 に答える 3

7

いいえ、しませんでした。実際、ColumnDefinitionにはActualWidthプロパティがあります。しかし、それは実装DependencyPropertyでもありません。したがって、更新されたINotifyPropertyChangedときにターゲットに通知する人は誰もいません。ActualWidth

回避策?何のために?あなたはいつでもあなたが望むものを正確に持ってElementNameいる親へのバインディングを使うことができます。複雑なフレーズでごめんなさい:)。簡単にすることはできませんでした。FrameworkElementActualWidth

お役に立てれば。

于 2009-09-28T16:28:22.250 に答える
4

プロパティは依存関係プロパティではなく、ColumnDefinition.ActualWidthバインディングはグリッドがレイアウト用に更新される前の初期値 0 のみを表示します。一方Grid.ActualWidth、プロパティは依存プロパティであり、幅が変化するとバインディングが更新されます。

于 2009-09-28T16:33:19.393 に答える
2

MSDN ページから:

行または列を追加または削除すると、すべての ColumnDefinition 要素の ActualWidth およびすべての RowDefinition 要素の ActualHeight は、Measure が呼び出されるまでゼロになります。

Measureどういうわけか、値が呼び出される前にバインドされているように見えます。Mode = OneWayこの動作を確認するには、バインドを強制し、コードでも手動でチェックしてみてください。

于 2009-09-28T16:21:34.847 に答える