簡體   English   中英

如何獲得此DataGridTextColumn的寬度以占用剩余空間的100%?

[英]How do I get this DataGridTextColumn's width to take up 100% of the remaining space?

我有一個問題,迫使文本列的寬度占用其剩余空間的100%。 DataGrid本身嵌套在ListView中,而ListView進一步嵌套在ListView中。 它的數據綁定是可觀察列表的可觀察列表,其中填充了不同長度的字符串。

我正在VS 2012,WPF 4.5和MVVM-Light工具箱中構建,以幫助進行耦合等。

我想占用100%剩余空間的列是第二列(PropertyValue)。 我嘗試了一些不同的方法,包括:

  • 將“寬度”屬性設置為“ *”。 這產生了大約10像素寬的列。
  • 將“寬度”屬性設置為“自動”。 如預期的那樣,這產生的列是最長字符串的最小所需長度。
  • 將Width屬性設置為父列表的ActualWidth綁定。 (請參見下面的代碼)這似乎產生與“自動”相同的結果。 奇怪的是,我將此列的文本綁定到相同的值,根據我自己制作窗口的大小,它顯示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>

我所看到的屏幕截圖: 在此處輸入圖片說明

我在此上花費的時間比我預期的要多,因此希望有人可以向我提供有關問題所在的線索。 (一旦所有事情都完成,我將把這些列表視圖的內聯樣式轉換為全局樣式)。

我將HorizontalContentAlignment="Stretch"更改為HorizontalContentAlignment="Center"

這使得DataGrid僅根據需要而變寬。 這對我的情況已經足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM