web-dev-qa-db-ja.com

WPF:コンポーネントの高さを別のコンポーネントの高さにバインドする

ウィンドウに、それぞれ列0、1、2にGridRadioButton、およびTextBoxを含むButtonがあります。 。それらはすべて、高さが自動に設定されています。

次に、ウィンドウの別の部分に、列0、1、および列にGridLabel、およびTextBoxを含む別のButtonがあります。 2.高さも自動に設定されます。

私が抱えている問題は、最初のグリッドの高さが2番目のグリッドよりも小さいことです。ラベルが2番目の背を高くしているからだと思います。最初のグリッドが2番目のグリッドと同じ高さになるようにするにはどうすればよいですか?私はこれをやってみました:

2番目のグリッドSomeNameのテキストボックスに名前を付けます。
の中に <Grid.ColumnDeclarations>最初のグリッドで、高さを「auto」から「{Binding ElementName = SomeName、Path = Height}」に変更しました。

しかし、それは私が望んでいたことをしませんでした。サイズは同じでした。バインディングは基本的に「自動」になってそこにスローされていると思いますが、最終的には同じものになります。

また、高さを固定値に設定する必要のない解決策を探しています。

22
zxcvbnm

2つのグリッドを 共有サイズスコープ に配置し、SharedSizeGroupを使用して行の高さを一緒にロックします。

<SomeContainer Grid.IsSharedSizeScope="True">  <!-- Could be the Window or some more nearby Panel -->
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition SharedSizeGroup="LabelAndRadioButtonGroup" />
    </Grid.RowDefinitions>
    <Label Grid.Row="0" />
  </Grid>
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition SharedSizeGroup="LabelAndRadioButtonGroup" />
    </Grid.RowDefinitions>
    <RadioButton Grid.Row="0" />
  </Grid>
</SomeContainer>

MSDNの 方法:グリッド間でサイズ設定プロパティを共有する も参照してください。

9
itowlson

ActualHeightプロパティではなくHeightにバインドします。

<RowDefinition Height="{Binding ActualHeight, ElementName=otherTextBox}" />
47
itowlson