如何获得此DataGridTextColumn的宽度以占用剩余空间的100%?

时间:2015-01-26 04:15:48

标签: wpf xaml listview datagrid mvvm-light

我有一个问题,强制文本列的宽度占用其剩余空间的100%。 DataGrid本身嵌套在ListView中,ListView进一步嵌套在ListView中。它的数据绑定是一个可观察列表,包含不同长度的字符串。

我在VS 2012,WPF 4.5中构建,使用MVVM-Light工具包来帮助进行耦合等。

我希望占用100%剩余空间的列是第二列(PropertyValue)。我尝试了一些不同的事情,包括:

  • 将Width属性设置为" *"。这产生了一个大约10像素宽的列。
  • 将Width属性设置为" Auto"。这产生了一个列,正如预期的那样,是最长字符串所需的最小长度。
  • 将Width属性设置为父列表的ActualWidth绑定。 (参见下面的代码)这似乎产生与" Auto"相同的结果。奇怪的是,我将此列的文本绑定到相同的值,它显示300-1000 +,具体取决于我创建窗口本身的大小。但是,该数字并未反映出色谱柱的宽度。
  • 将Width属性设置为硬值。这是唯一一次列的宽度大于Auto属性,但我宁愿不强制使用特定的宽度。
  • 我试图删除我认为不相关的所有内容(包括样式和所有其他元素,我仍然使用相同的列宽。

代码如下:

<UserControl x:Class="Foo.Views.XXLViews.XXLInformationView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:ignore="http://www.ignore.com"
    mc:Ignorable="d ignore"
    DataContext="{Binding XXLInformationViewModel, Source={StaticResource Locator}}">
<Grid>
    <Grid Margin="25,10,0,0" HorizontalAlignment="Left">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <StackPanel Orientation="Vertical" Grid.Column="0">
            <ListView ItemsSource="{Binding UnknownPropertiesCollections}" BorderThickness="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Padding="-4,2,0,0" Name="ListOfProperties">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ListView ItemsSource="{Binding}" BorderThickness="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"  Padding="-8,2,0,0">
                            <TextBlock Text="{Binding Name}" Style="{StaticResource PropertyListHeader}"/>
                            <DataGrid ItemsSource="{Binding PropertyCollection}" AutoGenerateColumns="False" Width="Auto">
                                <DataGrid.Columns>
                                    <DataGridTextColumn Width="Auto" Binding="{Binding Path=PropertyName}" FontWeight="Bold">
                                    </DataGridTextColumn>
                                    <DataGridTextColumn Width="{Binding Path=ActualWidth, ElementName=ListOfProperties}" Binding="{Binding Path=PropertyValue}">
                                        <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="TextBlock">
                                                <Setter Property="HorizontalAlignment" Value="Center"/>
                                            </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>
                                </DataGrid.Columns>
                            </DataGrid>
                        </ListView>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackPanel>
    </Grid>
</Grid>

我所看到的屏幕截图: enter image description here

我花了比预期更多的时间,所以希望有人能给我一个关于问题的线索。 (一旦完成所有内容,我将把这些列表视图的内联样式转换为全局样式。)

1 个答案:

答案 0 :(得分:0)

我将HorizontalContentAlignment="Stretch"更改为HorizontalContentAlignment="Center"

这使得DataGrid只能根据需要扩展。这对我的情况来说足够好了。