2

Grid1:3 の比率でサイズ設定された 2 つの行があります。最初の行はMinHeightゼロ以外の値に設定されています。2 番目の行に a を入れるとListBox、そのサイズはウィンドウの境界によって制限されません。

スクリーンショット

MinHeightが適用された場合 (つまり、ウィンドウが小さい場合) に問題が発生します。問題のある部分をに置き換えるListBoxButton、問題はなくなります (ボタンは常にウィンドウの境界内に留まります)。

MainWindow.xaml

<Window x:Class="WpfGridLayoutMinMax.MainWindow" x:Name="self"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="300" Width="300" MinHeight="200" MinWidth="200">
    <Control.Resources>
        <Style TargetType="ListBox">
            <Setter Property="Margin" Value="4"/>
            <Setter Property="ItemsSource" Value="{Binding Items, ElementName=self}"/>
        </Style>
    </Control.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="1*" MinHeight="100"/>
            <RowDefinition Height="3*"/>
        </Grid.RowDefinitions>
        <ListBox Grid.Row="0"/>
        <ListBox Grid.Row="1"/>
    </Grid>
</Window>

MainWindow.xaml.cs

using System.Collections.Generic;
using System.Linq;

namespace WpfGridLayoutMinMax
{
    public partial class MainWindow
    {
        public List<int> Items { get; set; }

        public MainWindow ()
        {
            Items = Enumerable.Range(0, 20).ToList();
            InitializeComponent();
        }
    }
}

質問: この問題の原因は何ですか? ListBoxウィンドウコンテンツエリア内にとどまるには?

4

3 に答える 3

1

この問題は、コンテンツが大きすぎるたびに発生します (高さを残りのスペースよりも大きく設定すると、ボタンも同様です)。

私のソリューションが好きかどうかはわかりませんが、残りのスペースを測定するためのグリッドを追加しました。残念ながら、2 番目の RowDefinition から直接 ActualHeight を取得することはできません (使用可能な値はありません)。そのため、もう 1 つのコントロール (ダミー) を追加しました。ListBox.MaxHeightDummy.ActualHeight に制限できるようになり、ウィンドウ内にとどまります。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="100" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid x:Name="Dummy" Grid.Row="1" />

    <Grid Grid.RowSpan="2">
        <Grid.RowDefinitions>
            <RowDefinition Height="1*" MinHeight="100"/>
            <RowDefinition Height="3*" />
        </Grid.RowDefinitions>
        <ListBox Grid.Row="0" />
        <ListBox Grid.Row="1" MaxHeight="{Binding ActualHeight, ElementName=Dummy}" />
    </Grid>
</Grid>
于 2013-10-01T12:32:51.893 に答える
0

1* と 3* で 2 つの行を設定し、1* の高さが最小で 100(px) であると言う場合、2 行目の最小値は 300(px) になります。理にかなっていますよね?したがって、この比率を維持し、最初の行の最小の高さを維持したい場合は、ウィンドウの最小の高さを 400 (またはそれ以上) に設定できます。

于 2013-10-01T11:12:22.180 に答える