最大のボタンの内容に応じて均等なサイズのボタン 質問する

最大のボタンの内容に応じて均等なサイズのボタン 質問する

ウィンドウに次のような内容の 2 つの WPF ボタンがあるとします。

<Button>OK</Button>
<Button>Cancel</Button>

これらのボタンを同じ幅にしたいのですが、Content特定のユーザーの言語のローカライズされた値にバインドされているシナリオでは、新しいコンテンツに対応するためにボタンをどのくらいの幅にする必要があるかわかりません。

これらのボタンに最小幅を適用して、最も幅の広いボタンの幅(コンテンツに応じて)が両方のボタンの幅として効果的に使用されMinWidth、均一に保たれるようにするにはどうすればよいでしょうか。

あるいは別の言い方をすると、ボタンの幅をコンテナの幅と同じにしたくない (コンテナを巧みに使用することが問題の解決策である場合を除く) し、それぞれのボタンをそれぞれのコンテンツに合わせてサイズ調整したくない (そうするとボタンのサイズが異なってしまう) のです。その中間のものが欲しいのです。最も大きなコンテンツを持つボタンのサイズを調整してそのコンテンツを表示し、その他はすべて同じ幅に調整して、幅がすべて同じになるようにします。

答えは、何らかのコンテナに入れることにあると思います。 を使っGridてグリッドの「セル」を埋めることもできますが、重要なのは、あまりにも幅も広くありません。Content_Changedボタンのイベントで実行され、最小幅を最も広いボタンの幅に設定するコード ビハインドがあることはわかっていますが、純粋な XAML メソッドに興味があります。ItemsControl新しいアイテムが追加されたりサイズが変更されたりしたときに、その RUSN コード ビハインドを拡張し、最も広いアイテムの幅をMinWidth他のすべてのアイテムの幅として適用するカスタム コントロールを作成する必要があるかもしれません。

よろしくお願いします。

ベストアンサー1

グリッド

  <Grid HorizontalAlignment="Right" Grid.IsSharedSizeScope="true">
    <Grid.ColumnDefinitions>
        <ColumnDefinition SharedSizeGroup="A"/>
        <ColumnDefinition SharedSizeGroup="A"/>
    </Grid.ColumnDefinitions>
    <Grid.Children>
        <Button Grid.Column="0" Content="OK"/>
        <Button Grid.Column="1" Content="Cancel"/>
    </Grid.Children>
  </Grid>

これは分割することができます。IsSharedSizeScope共通の祖先に基づく、例:

    <StackPanel Grid.IsSharedSizeScope="true">
        <Grid HorizontalAlignment="Right">
            <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="A"/>
            </Grid.ColumnDefinitions>
            <Grid.Children>
                <Button Grid.Column="0" Content="OK"/>
            </Grid.Children>
        </Grid>
        <!-- ... -->
        <Grid HorizontalAlignment="Left">
            <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="A"/>
            </Grid.ColumnDefinitions>
            <Grid.Children>
                <Button Grid.Column="0" Content="Cancel"/>
            </Grid.Children>
        </Grid>
    </StackPanel>

ボタンが大きくなりすぎないようにするには、HorizontalAlignmentグリッドの を 以外の値に変更するStretchか、 を設定しますMaxWidth

おすすめ記事