2016-04-25 3 views
1

У меня есть DataGrid с ColumnWidth="*" в ScrollViewer с HorizontalScrollBarVisibility="Auto". К сожалению, эта комбинация не работает хорошо. В то время как DataGrid правильно покрывает всю ширину окна, столбцы очень маленькие (MinWidth). Если я меняю HorizontalScrollBarVisibility на Disabled, он работает, но я теряю желаемое поведение ScrollViewer.DataGrid.ColumnWidth = "*" не работает в ScrollViewer

Minimal Рабочий пример:

<Window x:Class="WPF_Sandbox.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WPF_Sandbox" 
     Title="MainWindow" 
     x:Name="ThisControl"> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto"> 
     <DataGrid AutoGenerateColumns="False" ColumnWidth="*"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Column 1" /> 
       <DataGridTextColumn Header="Column 2" /> 
       <DataGridTextColumn Header="Column 3" /> 
       <DataGridTextColumn Header="Column 4" /> 
      </DataGrid.Columns> 
     </DataGrid> 
    </ScrollViewer> 
</Window> 

Почему это происходит и как я могу работать вокруг него?

+0

пытаются использовать 2 * вместо * –

+0

@MahdiFarhani Это ничего не делать. –

+0

Основная проблема - ScrollViewer, но позвольте мне найти причину. когда вы удаляете ScrollViewer, все хорошо. –

ответ

3

Проблема, которую вы видите, состоит в том, что поскольку Datagrid находится внутри ScrollViewer, у нее есть практически бесконечное пространство для расширения, поэтому он не может рассчитать ширину. Для этой работы вы можете связать DataGrid Width к ScrollViewer ViewportWidth, как это:

<DataGrid AutoGenerateColumns="False" ColumnWidth="*" 
Width="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type ScrollViewer}}, Path=ViewportWidth}"> 
Смежные вопросы