Цель
У меня есть приложение WPF, содержащее текст внутри DataGrid
.
Я хочу, чтобы текст был внутри каждой ячейки.
Я также хочу установить MinWidth для каждого столбца и, если это необходимо, ScrollViewer
должен создать полосу прокрутки horizonatl.
Я никогда не хочу, чтобы горизонтальная полоса прокрутки отображалась для любой из ячеек или самой 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>