2016-04-25 14 views
1

Ich habe einen DataGrid mit ColumnWidth="*" in einem ScrollViewer mit HorizontalScrollBarVisibility="Auto". Leider scheint diese Kombination nicht gut zu funktionieren. Während sich die DataGrid über die gesamte Fensterbreite erstreckt, sind die Spalten sehr klein (MinWidth). Wenn ich HorizontalScrollBarVisibility zu Disabled ändere, funktioniert es, aber ich verliere das gewünschte ScrollViewer Verhalten.DataGrid.ColumnWidth = "*" funktioniert nicht in einem ScrollViewer

Minimal Arbeitsbeispiel:

<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> 

, warum dies geschieht und wie kann ich es umgehen?

+0

Versuch 2 verwenden * statt * –

+0

@MahdiFarhani, der nichts tun. –

+0

das Hauptproblem ist ScrollViewer, aber lassen Sie mich den Grund finden. Wenn Sie den ScrollViewer entfernen, ist alles gut. –

Antwort

3

Das Problem, das Sie sehen, liegt daran, dass sich das Datagrid in einem ScrollViewer befindet und daher praktisch unbegrenzt erweitert werden kann, sodass keine Breiten berechnet werden können. Dazu Sie arbeiten kann das Datagrid-Breite an den Scrollviewportwidth, wie diese binden:

<DataGrid AutoGenerateColumns="False" ColumnWidth="*" 
Width="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type ScrollViewer}}, Path=ViewportWidth}"> 
Verwandte Themen