Проблемы с горизонтальным скролом в WPF DataGrid
Есть грида с одной колонкой. Колонка имеет Width="*". Проблема в том, что если содержимое textblock не влезает, горизонтальный скрол не появляется. Если поставить Width="Auto", то скрол появляется, но тогда справа от колонки есть пустое место. А его бы видеть не хотелось
<Window x:Class="AFP_GUI.EventFilterPropertyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:AFP_GUI"
xmlns:controls="clr-namespace:CommonGUI.Controls;assembly=CommonGUI"
xmlns:cc="clr-namespace:CommonGUI.Controls;assembly=CommonGUI"
mc:Ignorable="d"
WindowStartupLocation="CenterOwner"
Title="Настройка фильтра"
MinHeight="300"
MinWidth="300"
MaxHeight="800"
MaxWidth="800"
Style="{StaticResource LFWindowStyle}">
<Window.Resources>
<local:EventFilterPropertyWindowViewModel x:Key="ViewModel"/>
</Window.Resources>
<Window.InputBindings>
<KeyBinding Command="{Binding CancelCommand,
Source={StaticResource ViewModel}}"
Key="Esc"/>
</Window.InputBindings>
<Grid DataContext="{StaticResource ViewModel}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<cc:ButtonEdit Command="{Binding AddItemCommand}"
Text="{Binding NewItem, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
ButtonImage="/resources/Enter.png"
ShowImage="Visible">
<cc:ButtonEdit.Style>
<Style TargetType="{x:Type cc:ButtonEdit}" BasedOn="{StaticResource {x:Type cc:ButtonEdit}}">
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="IsReadOnly" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding CanAddNewItem}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
<Setter Property="IsReadOnly" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</cc:ButtonEdit.Style>
</cc:ButtonEdit>
<DataGrid Grid.Row="1"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelItem}"
AutoGenerateColumns="False"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Standard"
IsReadOnly="True"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
SelectionMode="Extended"
SelectionUnit="FullRow"
HorizontalAlignment="Stretch">
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="IsSelected" Value="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Style>
</DataGrid.RowStyle>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Header="" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
PreviewMouseDown="checkBox_PreviewMouseDown"
Margin="5,0,4,0"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding Value}"
Padding="9,2,2,2"
VerticalAlignment="Center"
MinHeight="20">
</TextBlock>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<!--<DataGrid.InputBindings>
<KeyBinding Command="{Binding AcceptCommand}" Key="Enter" />
</DataGrid.InputBindings>-->
</DataGrid>
<local:OkCancelControl Grid.Row="2"
OkCommand="{Binding OkCommand}"
CancelCommand="{Binding CancelCommand}"/>
</Grid>
Может кто знает как полечить. Кидать Гриду на скролвью пытался, не помогает.
Ответы (1 шт):
Установите свойство ScrollViewer.HorizontalScrollBarVisibility="Auto" и поместите ваш DataGrid в любой из контейнеров например в Grid, DockPanel, ContentControl или Window у становите ограничение контейнера по Width. Когда содержимое DataGrid не будет помешаться в родительский контейнер, активируется HorizontalScrollBar.