首页 > 解决方案 > WPF:DataGridTemplateColumn 内的网格未扩展

问题描述

我的项目面临两个问题:

我有一个DataGrid包含三个不同列的列,我希望中间的列使用剩余的所有可用空间。同样在该列中,我有一个 StackPanel,因为我需要在里面有两个元素:

为元素提供背景颜色我注意到 StackPanel 并没有填满列中剩余的所有可用空间,并且TextBlock不尊重其中的换行。我假设StackPanel没有假设 的 MaxWidthDataGridTemplateColumn并且它使用无限空间,因此TextBlock假设没有达到限制以使文本换行。

这是我的代码:

<DataGrid  x:Name="ConsumptionList" ItemsSource="{Binding ConsumptionList}"
        AutoGenerateColumns="False" IsReadOnly="True"
        CanUserReorderColumns="False" CanUserResizeColumns="False"
        BorderBrush="{x:Null}" VerticalContentAlignment="Center" CanUserSortColumns="False" HeadersVisibility="Column" Margin="0,0,0,-4" Background="{x:Null}">

    <DataGrid.Resources>
        <Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource foScrollBar.Small}"/>
    </DataGrid.Resources>

    <DataGrid.ColumnHeaderStyle>
        <StaticResource ResourceKey="clientScreenList.Header"/>
    </DataGrid.ColumnHeaderStyle>
    <DataGrid.RowStyle>
        <StaticResource ResourceKey="clientScreenList.Lines"/>
    </DataGrid.RowStyle>
    <DataGrid.CellStyle>
        <StaticResource ResourceKey="clientScreenList.Cells"/>
    </DataGrid.CellStyle>
    <DataGrid.Style>
        <StaticResource ResourceKey="foBillingList"/>
    </DataGrid.Style>

    <DataGrid.Columns>
        <!--quantity-->
        <DataGridTextColumn x:Name="ConsQttColumn"  MinWidth="20" Width="Auto" MaxWidth="80"  FontFamily="Segoe UI Semibold"
            Binding="{Binding Quantity, Converter={StaticResource DecimalToQuantityConverter}}" Header="{x:Static localization:LanguageRes.consList_quantity}"  />
        <!--description-->
        <DataGridTemplateColumn x:Name="ConsDescriptionColumn" Header="Descrição" Width="*" >
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Background="#FFDC1A1A">
                        <Border CornerRadius="30" Grid.Column="0" Width="30" Height="30" Background="{x:Null}" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,0,3,0">
                            <Border.Style>
                            <Style TargetType="{x:Type Border}">
                                <Setter Property="Visibility" Value="Collapsed" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Use_Half_Portion}" Value="1">
                                        <Setter Property="Visibility" Value="Visible" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                            </Border.Style>
                            <TextBlock Grid.Column="1" TextWrapping="Wrap" HorizontalAlignment="Center" Style="{StaticResource icon}" TextAlignment="Center" FontSize="22" Text="{x:Static TechUI:AppConstants+ICONS.HalfDose}" Padding="0" 
                                    Margin="0" Foreground="Black" Background="{x:Null}" />
                        </Border>
                        <TextBlock Text="{Binding Product_Description}" HorizontalAlignment="Left" TextAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Center" FontFamily="Segoe UI Semibold" Background="#FFB4AD1C" />
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <!-- total price-->
        <DataGridTemplateColumn x:Name="ConsTotalColumn" Header="Preço Total" Width="Auto" MaxWidth="135">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"  MaxWidth="135" VerticalAlignment="Center" >
                        <TextBlock MaxWidth="135" HorizontalAlignment="Stretch" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" FontFamily="Segoe UI Semibold" >
                            <TextBlock.Style>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Setter Property="Text" Value="{Binding Total_W_Vat, Converter={StaticResource DecimalToPriceConverter}}" />
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Is_Composite}" Value="1">
                                                <Setter Property="Text" Value=" " />
                                            </DataTrigger>
                                        </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

在此处输入图像描述

正如您在图像中看到的,红色元素是StackPanel,绿色元素是TextBlock。在第一行你可以看到文本被剪切而不被包裹,全文是“Almondegas Frango”

标签: wpfxamldatagrid

解决方案


我找到了解决方案。

刚刚更改了StackPanelfor a DockPanel,它的工作方式与我想要的完全相同!


推荐阅读