将Datagrid绑定到父级以使Column Width = *起作用

时间:2015-01-08 08:41:27

标签: c# wpf xaml datagrid

上下文:我想创建一个包含一行的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的大小会永远增长。

我好看,为什么它会增长(更新孩子更新父母等等)。但我想我并不是第一个愿意做这项工作的人,所以我想我在这里做错了什么?

0 个答案:

没有答案