如何在TextBlock WPF DataGridTextColumn上的编辑模式下包装文本

问题描述 投票:0回答:2

我有一个DataGridTextColumn,我在其中将文本包装在一列中。由于只有一个单元格具有多个数字,并且在这种情况下,电缆名称“在3行中显示正常”,但在编辑模式下,包装消失了,我看不到全文。需要使用箭头键。我想在编辑模式下有一个可编辑的文本换行文本块。在SO上寻找一些建议但没有成功。有帮助吗?

CableEditorWindow.xaml:

    <Controls:MetroWindow x:Class="GPZmodel.Windows.CableEditorWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="Edytor właściwości kabla" Height="664" Width="610" 
    Background="WhiteSmoke" WindowStartupLocation="CenterScreen">

<Grid>



    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="Auto" MinHeight="70"/>
    </Grid.RowDefinitions>
    <DataGrid  x:Name="CableEditDataGrid"
               Style="{StaticResource AzureDataGrid}"
               Grid.Row="0" 
               VerticalAlignment="Stretch" 
               ItemsSource="{Binding Rows, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
               CanUserAddRows="False" 
               CanUserDeleteRows="False" CanUserSortColumns="True" AutoGenerateColumns="False"
               ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" 
               SelectionMode="Single">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Pole" Width="Auto" 
                                HeaderStyle="{StaticResource WysrodkujHeader}" 
                                Binding="{Binding nazwa_pola,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
                                IsReadOnly="True" 
                                >
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Style.Triggers>
                            <Trigger Property="Text"  Value="ID">
                                <Setter Property="Background" Value="#FF84BCCD"/>
                                <Setter Property="FontSize" Value="13"/>
                            </Trigger>
                        </Style.Triggers>
                        <Setter Property="TextAlignment" Value="Center"/>

                    </Style>
                </DataGridTextColumn.ElementStyle>

            </DataGridTextColumn>


            <!--THIS-->
            <DataGridTextColumn Header="Wartość" 
                                HeaderStyle="{StaticResource WysrodkujHeader}"
                                Width="*" 
                                Binding="{Binding wartosc_pola, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                > 
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=ReadOnly}" Value="True">
                                <Setter Property="IsTabStop" Value="False"/>
                                <Setter Property="Focusable" Value="False"/>
                            </DataTrigger>
                        </Style.Triggers>
                        <Style.Setters>
                            <Setter Property="TextBlock.TextAlignment" Value="Center"/>
                            <Setter Property="VerticalAlignment" Value="Stretch"/>
                            <Setter Property="HorizontalAlignment" Value="Stretch"/>
                        </Style.Setters>
                    </Style>
                </DataGridTextColumn.CellStyle>
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="TextBlock">
                        <Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <!--/THIS-->

            <DataGridTextColumn x:Name="JednostkaTextBox" 
                                Header="Jednostka"
                                HeaderStyle="{StaticResource WysrodkujHeader}"
                                Binding="{Binding jednostka_pola,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                IsReadOnly="True"
                                Width="0.4*">
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
    <Grid Grid.Row="1" Background="#4A6A95">
        <Button Style="{StaticResource MainButtonStyle}" Content="Nadpisz" x:Name="NadpiszButton"   HorizontalAlignment="Right" Width="120" Panel.ZIndex="1" Margin="0,0,10,21" Height="32" VerticalAlignment="Bottom" Click="NadpiszButton_Click" />
        <Button Style="{StaticResource MainButtonStyle}" Content="Anuluj" Name="AnulujButton" Height="32" VerticalAlignment="Bottom" Panel.ZIndex="1" Margin="0,0,135,21" HorizontalAlignment="Right" Width="120" Click="AnulujButton_Click" />
    </Grid>
</Grid>

c# wpf datagrid wpfdatagrid
2个回答
0
投票

除了ElementStyleTextBlock之外,你还应该定义一个EditingElementStyle,它将TextWrappingTextBox属性设置为Wrap

<DataGridTextColumn.EditingElementStyle>
    <Style TargetType="TextBox">
        <Setter Property="TextWrapping" Value="Wrap"/>
    </Style>
</DataGridTextColumn.EditingElementStyle>

当您处于编辑模式时,没有显示TextBlock。这是一个TextBox


0
投票

幸运的是,解决方案很简单:将EditingElementStyle添加到您的列中,您可以(或应该)单独自定义编辑样式

<DataGridTextColumn.EditingElementStyle>
   <Style>
      <Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
   </Style>
</DataGridTextColumn.EditingElementStyle>

您的最终代码部分将如下所示

<!--  THIS  -->
<DataGridTextColumn Width="*"
    Binding="{Binding wartosc_pola, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
    Header="Wartość"
    HeaderStyle="{StaticResource WysrodkujHeader}">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=ReadOnly}" Value="True">
                    <Setter Property="IsTabStop" Value="False" />
                    <Setter Property="Focusable" Value="False" />
                </DataTrigger>
            </Style.Triggers>
            <Style.Setters>
                <Setter Property="TextBlock.TextAlignment" Value="Center" />
                <Setter Property="VerticalAlignment" Value="Stretch" />
                <Setter Property="HorizontalAlignment" Value="Stretch" />
            </Style.Setters>
        </Style>
    </DataGridTextColumn.CellStyle>
    <DataGridTextColumn.ElementStyle>
        <Style>
            <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
        </Style>
    </DataGridTextColumn.ElementStyle>
    <DataGridTextColumn.EditingElementStyle>
        <Style>
            <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
        </Style>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
<!--  /THIS  -->
© www.soinside.com 2019 - 2024. All rights reserved.