2017-01-24 6 views
2

アイテムリストの表示に使用するXAML/WPFカスタムコントロールがあります。私はそれが追加された最も広い項目の幅にrezizeしたいので、最初にこの幅をAutoに設定しました。実行時の自動幅を変更する

<custom:MyCustomControl ThemeName="MyDefaultTHeme" 
         x:Name="PART_MyItems" 
         Height="Auto" 
         Width="Auto"/> 

しかし、実行時にユーザーが項目を見てどのように変更私のカスタムコントロールのControlTemplateの(THEMENAME)を変更することができます(アイコンとテキストサイズなど)。コントロールは、アイテムの幅に応じて幅を変更し、時には画面の幅全体を埋めることがあります。これは私が望んでいない。

どのように私はどちらか、最初の使用(コントロールの最初のロード)した後Width="Auto"をオフにしたり、初期幅に幅を設定し、それを再度変更することはできません>

+2

なぜMaxWidthを設定して、それがあなたが望む以上に大きくなるのを制限しないのですか? – Joe

+0

これはあなたのために働くかもしれませんhttp://stackoverflow.com/questions/2459089/wpf-auto-height-in-code – kenny

答えて

2

だけMyCustomControl.Width = MyCustomControl.ActualWidth前に呼び出しますあなたはおそらくテーマ切り替えを行うC#コードを持っているので、そのテーマを変更します。それは自動車を取り除くでしょう。

+1

これは動作し、私のコントロールのサイズを変更しません。 GridSlitterを左にドラッグすると、コントロールが同じサイズのままで、GridSplitterで拡張されません。だから私は最初に説明したよりも厄介です。テーマが変更されたときにAutoSizeをオフにしてから、その後に再度オンにしたい場合は –

+1

周囲のコントロールステートのすべてのサイジングファクターを考慮してWidthでマルチバインディングを行うことができない場合は、コントロールのMeasureOverrideメソッドをオーバーライドする必要があるので、各状況でコントロールがどの程度の大きさであるべきかという問題で一連のコードを投げることができます。 – hoodaticus

関連する問題