WPF: Сетка внутри DataGridTemplateColumn не расширяется - PullRequest
0 голосов
/ 11 марта 2020

Я столкнулся с двумя проблемами с моим проектом:

  • SpackPanel не расширяет пространство, доступное внутри DataGridTemplateColumn
  • TextBlock без переноса

У меня есть DataGrid с тремя разными столбцами, и я хочу, чтобы один посередине использовал все оставшееся свободное место. Также в этом столбце у меня есть StackPanel, потому что мне нужно иметь два элемента внутри:

  • Граница со значком внутри, который просто появляется в зависимости от Use_Half_Portion значения
  • TextBlock с текстом

Предоставление цветов фона элементам, которые я заметил, что StackPanel не заполняет все доступное пространство, оставшееся внутри столбца, и перенос в TextBlock не соблюдается. Я предполагаю, что StackPanel не предполагает MaxWidth DataGridTemplateColumn и использует неограниченное пространство, и из-за этого 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>

enter image description here

Как вы можете видеть на изображении, красный элемент - StackPanel, а зеленый - TextBlock. В первой строке вы видите, что текст обрезается и не переносится, полный текст: «Almondegas Fran go»

1 Ответ

0 голосов
/ 11 марта 2020

Я нашел решение.

Просто изменил StackPanel на DockPanel, и он работал точно так же, как я хотел!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...