0

グリッド「MainGrid」の 3 列目に StackPanel があります。(3 番目の列) の幅が「2*」に設定されています。

マージンを使用して StackPanel を非表示にし、スライド アニメーションを使用して表示したいと考えています。

だから私は StackPanel のMarginを Column[2] Widthに設定する必要がありますが、どうすれば取得できますか? 私はこれを試しています:

Margin="{Binding ElementName=MainGrid, Path=ColumnDefinitions[2].ActualWidth, Converter={StaticResource marginConverter}}

そのため、コード ビハインドでコンバーターにブレークポイントを追加すると、常に 0 になります。

Column[2] ActualWidth の代わりにMainGrid .ActualWidthを使用しようとしましたが、最初はゼロでコンバーターに送信され、次に実際の幅になります。

4

1 に答える 1

0

残念ながら、ColumnDefinition.ActualWidthは依存関係プロパティではないため、更新を報告しません。簡単な解決策は、継承元の新しいクラスを作成し、親がレイアウトを更新するたびにColumnDefinition通知を変更することです。の代わりに、このクラスを xaml で使用します。ActualWidthGridColumnDefinition

public class MyColumnDefinition : ColumnDefinition, INotifyPropertyChanged
{
    public MyColumnDefinition() : base() { }

    protected override void OnInitialized(EventArgs e)
    {
        base.OnInitialized(e);

        ((Grid)Parent).LayoutUpdated += MyColumnDefinition_LayoutUpdated;
    }

    private void MyColumnDefinition_LayoutUpdated(object sender, EventArgs e)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ActualWidth"));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
于 2019-03-21T07:00:33.220 に答える