1

内部にいくつかのアイテムを含むグリッドがありますが、すべてが表示されているわけではありません。一部は折りたたまれています。WPF新しいアイテムが表示されたときに、グリッドに既に表示されているアイテムのサイズを変更する簡単な方法はありますか?

実際、私のニーズはそれよりも単純です。垂直に積み重ねる必要があるアイテムは 2 つしかありません。ほとんどの場合、1 つだけが表示されますが、2 つ目が表示されたら、最初のものをグリッドのサイズの 2/3 にサイズ変更し、2 つ目を残りの場所 (1/3) の下に配置する必要があります。

ここに画像の説明を入力

Grid.Rowプロパティ (およびおそらく) をいじる必要があるように感じGrid.RowSpanますが、コード ビハインドで台無しにせずに目的の動作を実現する方法がわかりません。

私が試したのは、自動サイズとLastChildFillプロパティを組み合わせてDockPanel成功しなかったことです。

4

1 に答える 1

1

次のようなものを試すことができます:

<Grid Background="Green">
  <Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition>
      <RowDefinition.Style>
        <Style TargetType="{x:Type RowDefinition}">
          <Setter Property="Height"
                  Value="0.25*" />
          <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=secondRect,
                                            Path=Visibility}"
                          Value="Collapsed">
              <Setter Property="Height"
                      Value="0" />
            </DataTrigger>
          </Style.Triggers>
        </Style>
      </RowDefinition.Style>
    </RowDefinition>
  </Grid.RowDefinitions>
  <!--  Row 1  -->
  <Rectangle Grid.Row="0"
              Fill="Blue" />
  <!--  Row 2  -->
  <Rectangle x:Name="secondRect"
              Grid.Row="1"
              Fill="Tomato" />
</Grid>

したがってStyle.Trigger、2番目のグリッド行にaを設定して、含まれている要素がそうであるかどうかを確認し、Collapsedそうであれば高さを「0」に設定し、そうでない場合は「0.25 *」に設定しますが、Grid行1にはHeight*または「残りのすべてのスペース」がありますこれはこの罰金に結びつくでしょう。

代わりの:

あなたがGrid.RowSpan言及したように、あなたはそれを行うことができます。

<Grid Background="Green">
  <Grid.RowDefinitions>
    <RowDefinition Height="0.75*" />
    <RowDefinition Height="0.25*" />
  </Grid.RowDefinitions>
  <!--  Row 1  -->
  <Rectangle Grid.Row="0"
              Fill="Blue">
    <Rectangle.Style>
      <Style TargetType="{x:Type Rectangle}">
        <Setter Property="Grid.RowSpan"
                Value="1" />
        <Style.Triggers>
          <DataTrigger Binding="{Binding ElementName=secondRect,
                                          Path=Visibility}"
                        Value="Collapsed">
            <Setter Property="Grid.RowSpan"
                    Value="2" />
          </DataTrigger>
        </Style.Triggers>
      </Style>
    </Rectangle.Style>
  </Rectangle>
  <!--  Row 2  -->
  <Rectangle x:Name="secondRect"
              Grid.Row="1"
              Fill="Tomato"
              Visibility="Collapsed" />
</Grid>

これTriggerで、1 番目の行の「要素」よりもを取得しGrid.RowDefinition、2 番目の行の要素を検出するとCollapsed、最初の行の RowSpan を 2 に切り替えます。それ以外の場合は 1 のままです。

于 2013-06-30T21:18:30.080 に答える