8

初期の高さに収まらないデータを追加すると、高さが増加するWPFDataGridがあります。ユーザーがウィンドウサイズを大きくしない限り、高さを変更したくありません。この自動サイズ変更を停止する方法はありますか?

<Window x:Class="WpfDataGridSizeTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Loaded="Window_Loaded"
        SizeToContent="WidthAndHeight">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <DockPanel Grid.Row="0">
            <DataGrid x:Name="wordsDataGrid" VerticalAlignment="Top" ItemsSource="{Binding}" MinHeight="100" SelectionMode="Single" AutoGenerateColumns="False" VerticalScrollBarVisibility="Auto" >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Column" Width="Auto" Binding="{Binding AString}"/>
                </DataGrid.Columns>
            </DataGrid>
        </DockPanel>
    </Grid>
</Window>

    public partial class MainWindow : Window
    {
        MyList myList = new MyList();

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            wordsDataGrid.DataContext = myList;
            for (int i = 0; i < 100; ++i)
            {
                myList.AddOne("blah blah");
            }
        }
    }

    public class MyList : ObservableCollection<AClass>
    {
        public MyList() { }

        public void AddOne(string aString)
        {
            base.Add(new AClass(aString));
        }
    }

    public class AClass
    {
        public string AString { get; set; }

        public AClass(string aString)
        {
            AString = aString;
        }
    }
4

6 に答える 6

5

誤解しない場合は、DataGridを最初はセントインの高さにし、Windows内のDataGridの下に空のスペースを配置する必要があります...次に、ウィンドウのサイズを変更すると、DataGridによってサイズが変更されます。

グリッドにもう1つの行を追加し、その行のMinHeightを定義します。次に、DataGridをVerticalAlignment=Stretchに設定します。また、ウィンドウのデフォルトの高さサイズを設定します。

<Window x:Class="WpfDataGridSizeTest.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="MainWindow" Loaded="Window_Loaded" Height="300"> 
    <Grid> 
        <Grid.RowDefinitions> 
            <RowDefinition Height="*"/> 
            <RowDefinition MinHeight="100"/> 
        </Grid.RowDefinitions> 
        <DockPanel Grid.Row="0" VerticalAlignment="Stretch"> 
            <DataGrid x:Name="wordsDataGrid" VerticalAlignment="Stretch" ItemsSource="{Binding}" MinHeight="100" SelectionMode="Single" AutoGenerateColumns="False" VerticalScrollBarVisibility="Auto" > 
                <DataGrid.Columns> 
                    <DataGridTextColumn Header="Column" Width="Auto" Binding="{Binding AString}"/> 
                </DataGrid.Columns> 
            </DataGrid> 
        </DockPanel> 
    </Grid> 
</Window> 
于 2012-06-12T13:53:34.370 に答える
3

同じ問題が発生し、ウィンドウ定義でSizeToContent="WidthAndHeight"を削除するだけで修正しました。

于 2016-01-08T00:35:02.640 に答える
1

これはあなたが望むことをします:

<Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="1*"/>
      <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="70"/>
      <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <DataGrid Name="dgMain" AutoGenerateColumns="True"></DataGrid>

    </Grid>

これと一緒に:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Foo foo;
        List<Foo> foos = new List<Foo>();

        foo = new Foo() { Name = "Sjaak" };
        foos.Add(foo);

        foo = new Foo() { Name = "Joepie" };
        foos.Add(foo);

        dgMain.ItemsSource = foos;

    }
}

public class Foo
{
    public Foo() { }

    public String Name { get; set; }
}

秘訣は、両方の行の高さプロパティに「1 *」を使用して、行の高さを比例(均等)に配分することです。1行の高さを「2*」などに設定することで、他の「共有」に分配することもできます。

于 2012-06-13T08:06:13.790 に答える
0

問題がグリッド全体の成長である場合(ただし、個々の行が成長することに満足している場合)、DataGridが内部にある親パネルは何ですか?これを変更すると、コントロールのサイズ変更方法に影響を与える可能性があります。

例:aStackPanelは、その子を一方向(積み重ねの方向)に成長させることができ、aDockPanelは、「塗りつぶされた」要素のサイズを使用可能なスペースに制限します。

于 2012-06-12T10:45:14.413 に答える
0

VerticalAlignment = Topたとえば、を使用Heightするか、プロパティを明示的に値に設定してみてください。

これは、DataGridをStackPanelに配置し、StackPanelのサイズ設定動作を制御するのにも役立つ場合があります。

于 2012-06-12T10:18:52.443 に答える
0
 VerticalAlignment="Bottom" 

これとまったく同じ問題を解決するために私のために働いた。私も使用しました

 VerticalScrollBarVisibility="Auto"     
于 2017-11-08T14:03:29.393 に答える