Проблема
У меня есть DataGrid
в приложении wpf.
Проблема связана с тем, как DataGrid
выглядит после определенных событий изменения размера окна.
Всякий раз, когда пользователь сжимает окно, а затем снова увеличивает его, строки DataGrid
уменьшаются (из-за переноса текста), но высота самого DataGrid
не уменьшается.
В результате получается, что вокруг DataGrid
есть слишком длинная граница.
Эта граница сжимается вниз, как только пользователь уменьшает высоту окна. Эта граница также слишком длинная при запуске приложения.
Xaml
<Window x:Class="SampleApp.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">
<Window.Resources>
<Style x:Key="WrappingTextBlock" TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
<Style x:Key="WrappingTextBox" TargetType="TextBox">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
</Window.Resources>
<Grid>
<Border>
<ScrollViewer>
<StackPanel>
<DataGrid ItemsSource="{Binding Objects}" HorizontalAlignment="Stretch" Margin="5" AutoGenerateColumns="False" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled">
<DataGrid.Columns>
<DataGridTextColumn MinWidth="15" Width="Auto" Header="#" Binding="{Binding Number}"/>
<DataGridTextColumn MinWidth="65" Width="Auto" Header="Style" Binding="{Binding Style}"/>
<DataGridTextColumn MinWidth="80" Width="*" Header="Description" Binding="{Binding Description}" ElementStyle="{StaticResource WrappingTextBlock}" EditingElementStyle="{StaticResource WrappingTextBox}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</ScrollViewer>
</Border>
</Grid>
</Window>
Code-Behind
using System.Collections.Generic;
using System.Windows;
namespace SampleApp {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
DataContext = new ViewModel();
}
}
public class ViewModel {
public ViewModel() {
Objects = new List<MyObject>() {
new MyObject() { Number=1, Style="Good Style", Description="Small description", },
new MyObject() { Number=2, Style="Bad Style", Description="This is a medium length description that you are reading.", },
new MyObject() { Number=3, Style="Awesome Style", Description="This is a long description that you are reading because I repeat the message. This is a long description that you are reading because I repeat the message.", },
};
}
public List<MyObject> Objects { get; set; }
}
public class MyObject {
public MyObject() { }
public int Number { get; set; }
public string Style { get; set; }
public string Description { get; set; }
}
}