上下文:我想创建一个包含一行的DataGrid,它应该占据整个地方。 据我所知,我需要设置DataGrid的宽度以确保此代码有效:
<StackPanel x:Name="stackMails" Orientation="Horizontal">
<TextBlock Text="Personal E-Mails:" />
<DataGrid x:Name="dgPersonalMail" VerticalScrollBarVisibility="Auto" ItemsSource="{Binding SupportConfiguration.PersonalMailAddresses}" CanUserAddRows="True" CanUserDeleteRows="True" CanUserResizeRows="False" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="E-Mail" Binding="{Binding}" Width="*" />
</DataGrid.Columns>
</DataGrid>
由于我想使DataGrid的大小动态化,我将DataGrid的宽度绑定到Stackpanel的ActualWidth:
<Style TargetType="DataGrid">
<Setter Property="Width">
<Setter.Value>
<Binding Path="ActualWidth" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=StackPanel, AncestorLevel=1}" />
</Setter.Value>
</Setter>
<Setter Property="MaxWidth" Value="400" />
<Setter Property="MaxHeight" Value="350" />
<Setter Property="MinHeight" Value="150" />
</Style>
这是我在SO上找到的解决方案,在这里看到:How do I make XAML DataGridColumns fill the entire DataGrid?(在窗口上绑定它具有相同的行为。)
但现在问题开始了:看到这个线程WPF What happens when a child's width is bound to a parent's actualwidth。 这正是我得到的行为:没有MaxWidth,DataGrid的大小会永远增长。
我好看,为什么它会增长(更新孩子更新父母等等)。但我想我并不是第一个愿意做这项工作的人,所以我想我在这里做错了什么?