gpt4 book ai didi

c# - DataGrid 中的 TextWrapping

转载 作者:行者123 更新时间:2023-11-30 20:07:10 26 4
gpt4 key购买 nike

目标

我有一个 WPF 应用程序,它在 DataGrid 中包含文本。我希望文本包装在每个单元格内。我还想为每一列设置一个 MinWidth,如果必须,ScrollViewer 应该创建 horizo​​natl 滚动条。我从不希望任何单元格或 DataGrid 本身出现水平滚动条。如果用户调整窗口大小,行应该增大或缩小以适应文本换行,但不应让列变得太细以至于无法再阅读。

问题

现在,文本不会换行,因为它在滚动查看器中。我知道我可以通过不同的方式来更改此示例以使文本换行,但我无法让它完全按照我想要的方式运行,如上所述。

简化的 xaml

<Window x:Class="SampleApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SampleApp"
Title="App" Height="350" Width="525">

<Window.Resources>
<Style x:Key="WrappingTextBlock" TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
<Style x:Key="WrappingTextBox" TargetType="TextBox">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
</Window.Resources>

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<Stuff ... />

<MoreStuff ... />

<Border Grid.Row="1" Grid.Column="1">
<ScrollViewer>
<StackPanel>
<DataGrid HorizontalAlignment="Left" ItemsSource="{Binding AwesomeObject, Mode=TwoWay}" Margin="5" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="#" Binding="{Binding Number, Mode=TwoWay}"/>
<DataGridTextColumn Header="Header" Binding="{Binding Data, Mode=TwoWay}"/>
<DataGridTextColumn MinWidth="50" Header="Long Text" Binding="{Binding SoMuchText, Mode=TwoWay}" ElementStyle="{StaticResource WrappingTextBlock}" EditingElementStyle="{StaticResource WrappingTextBox}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</ScrollViewer>
</Border>
</Grid>
</Window>

最佳答案

尝试将列的宽度设置为“*”

 <Border Grid.Row="1" Grid.Column="1">
<ScrollViewer>
<StackPanel>
<DataGrid HorizontalAlignment="Left" ItemsSource="{Binding AwesomeObject, Mode=TwoWay}" Margin="5" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Width="10*" Header="#" Binding="{Binding Number, Mode=TwoWay}"/>
<DataGridTextColumn Width="10*" Header="Header" Binding="{Binding Data, Mode=TwoWay}"/>
<DataGridTextColumn Width="50*" Header="Long Text" Binding="{Binding SoMuchText, Mode=TwoWay}" ElementStyle="{StaticResource WrappingTextBlock}" EditingElementStyle="{StaticResource WrappingTextBox}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</ScrollViewer>
</Border>

这意味着第 1 列的长度至少为 10 并且还在增长这意味着第 2 列的长度至少为 10 并且还在增长这意味着第 3 列的长度至少为 50 并且还在增长

您可以使用 * 使用百分比 (.Number*) 或长度 (Number*) 调整大小

关于c# - DataGrid 中的 TextWrapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com