쉬운 해결책은이 같은 columnWidth의 속성을 설정하여 그 열에 대한 starsizing DataGrid에 사용을하는 것입니다 :
<DataGrid Width="800" ColumnWidth="*" />
문제 그러나, 이것은 아마 인, 똑같이 넓은 모든 열을 만드는 것입니다 원하는.
그래서 어떻게 할 것인가? 먼저 지금처럼 모든 열을 기본 방법으로 만든 다음 나중에 각 열을 별 모양으로 설정하는 것입니다. 이렇게하면 새 너비에 대한 값을 계산할 수 있으므로 열이 초기 크기를 유지하게됩니다. 내가 무슨 뜻인지 보여주기 위해 코드의 작은 조각을 작성했습니다
..
XAML
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
Title="MainWindow" Height="350" Width="850">
<StackPanel>
<DataGrid x:Name="dgTest" Width="800" Loaded="dgTest_Loaded" />
</StackPanel>
</Window>
코드 숨김
public partial class MainWindow : Window
{
public class Test
{
public string P1 { get; set; }
public string P2 { get; set; }
public string P3 { get; set; }
}
public MainWindow()
{
InitializeComponent();
var t = new List<Test>(new[] {
new Test{ P1="på,dsl", P2="234234", P3="asdasdasd"},
new Test{ P1="asasaspå,dsl", P2="23sadasd asf afasdasdasd4234", P3="asdasdasd" },
new Test{ P1="på,ds1231l", P2="234", P3="1ddsdasd" },
});
dgTest.ItemsSource = t;
}
private void dgTest_Loaded(object sender, RoutedEventArgs e)
{
//Make the columns use starsizing so their combined width
//can't be bigger than the actual datagrid that contains them.
foreach (var column in dgTest.Columns)
{
var starSize = column.ActualWidth/dgTest.ActualWidth;
column.Width = new DataGridLength(starSize, DataGridLengthUnitType.Star);
}
}
}
완벽한, 고마워요. – boert03