3

WPF Grid コントロールの動作にかなり混乱しています。

これが私が得ることができる最も簡単な複製です:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" MinHeight="100" MaxHeight="300" />
            <RowDefinition Height="0.1*" MinHeight="100" />
        </Grid.RowDefinitions>
        <Button Grid.Row="0" Height="200" />
        <Button Grid.Row="1" />
    </Grid>
</Window>

これを実行してウィンドウを縮小すると、一番上のボタンが縮小し始める前に、一番下のボタンが切り取られることに気付くでしょう。

Height="200"ボタンから削除することで、目的の動作を得ることができます。ただし、私の実際の使用例では、ボタンは ScrollViewer を含む Border に置き換えられます。どちらにも高さを明示的に設定していませんが (ただし、ScrollViewer のコンテンツには設定しています)、同じクリッピング動作が見られます。

だから、質問:

行のコンテンツの高さを無視するにはどうすればよいですか? または、同じ効果を得る別の方法はありますか?

4

1 に答える 1

2

最小グリッドサイズは300(Row1の場合は200、Row2の場合は100)であるため、最小のグリッドサイズは300にGridなります。ウィンドウをそのサイズより小さく縮小すると、ウィンドウのGrid一部が切り取られて非表示になり、拡大縮小されません。 。

DockPanelおそらく、代わりに使用するように切り替えることができますか?

<DockPanel>
    <Button DockPanel.Dock="Bottom" MinHeight="100" />
    <Button Grid.Row="0" Height="200" MinHeight="100" MaxHeight="300"  />
</DockPanel>

このようにして、下のビットは常に画面の下部にドッキングされ、他のコンテンツは残りのスペースを占有します。

サイズ比を本当に維持したい場合は、コンテンツコントロールの高さをウィンドウサイズのパーセンテージに設定するコンバーターをお勧めします。

<DockPanel x:Name="Parent">
    <Button DockPanel.Dock="Bottom" MinHeight="100" 
            Height="{Binding ActualHeight,
                             ElementName=Parent, 
                             Converter={StaticResource PercentConverter}, 
                             ConverterParameter=0.1}" />
    <Button Grid.Row="0" Height="200" MinHeight="100" MaxHeight="300"  />
</DockPanel>
于 2012-06-22T15:01:02.200 に答える