2009-05-15 20 views
4

私はしばらくの間この壁で頭を打ちました。ContentControlのサイズ変更で問題が発生する

私はContentControlから派生したカスタムコントロールを持っています。それは、宣言的にまたはプログラム的に親に合わせてサイズが変更されない限り、完全に機能しています。

カスタムコントロールは(最終的に)コンテンツプレゼンター内で親子化されていますが、正しいサイズですが、自分のサイズに合わせてサイズを変更しません。

MyControl 36022757: Size is 400x267 (Stretch/Stretch) 
Parent is 979x569 (Stretch/Stretch) 
MyControl 36022757: New size is 400x267 

:私は明示的に(右現時点では)幅と高さを設定しても

(sample.MyControl) - 400x267 
- (System.Windows.Controls.ContentPresenter) - 979x569 

、サイズが

 Debug.WriteLine(string.Format("MyControl {0}: Size is {1}x{2} ({3}/{4})", 
      GetHashCode(), this.ActualWidth, this.ActualHeight, 
      this.HorizontalAlignment, this.VerticalAlignment)); 

     Debug.WriteLine(string.Format("Parent is {0}x{1} ({2}/{3})", 
             parent.ActualWidth, parent.ActualHeight, 
             parent.HorizontalAlignment, parent.VerticalAlignment)); 

     this.Width = parent.ActualWidth; 
     this.Height = parent.ActualHeight; 

     Debug.WriteLine(string.Format("MyControl {0}: New size is {1}x{2}", 
      GetHashCode(), this.ActualWidth, this.ActualHeight)); 

上記のコードが与える "固執" しません。なぜ!ああ、なぜ神よ!

誰でもアイデアがありますか?

答えて

17

あなたは自分のコントロールにHorizontalContentAlignment="Stretch"VerticalContentAlignment="Stretch"を追加する必要があります。

<ContentControl HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    ... 
</ContentControl> 

このような場合にはSilverlight Spyツールは、実行時にレイアウトをデバッグするのに役立ちます。

このツールでアプリケーションを実行しようとすると、すべてのxaml要素を表示し、実行時に一部のプロパティを変更することもできます。

+0

これは苦しい問題を解決しました。ありがとうございます! +1 –

+0

うーん、WPFの同じ問題でこれがうまくいくことを期待していましたが、修正プログラムは何も変わっていないようです。 :( – Domokun

+0

私はこのことについて全面的に知っていました。私のコントロールの周りを包み込んでいたコンテンツコントロールにこれらを適用するためには、コンテナをテンプレート化する必要があることが判明しました。 – Rammesses

関連する問題