web-dev-qa-db-ja.com

wpfで、データグリッドをウィンドウの高さに合わせる方法

3列2行のグリッドがあります

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

私は左下のセルです。AutoGenerateColumns= Trueのデータグリッドがあり、多くの行をロードできます。私がやりたいことは、データグリッドの高さを最大化してウィンドウに合わせ、ユーザーがデータグリッドのスクロールバーを使用して行を上下にスクロールできるようにすることです。

何が起こるかというと、ウィンドウの下部のデータグリッドフロー、そして私が

ScrollViewer.VerticalScrollBarVisibility="Visible"

データグリッドの場合、スクロールバーは効果がなく、行は下に流れます。どういうわけかデータグリッドは制限を感じていません...

何をすべきか?

17
GilShalit

DataGridのHorizontalAlignment=StretchおよびVerticalScrollBarVisibility=Autoを設定してみてください

それが機能しない場合は、グリッドの高さをウィンドウの高さにバインドして、コンテンツに合わせて自動拡張しないようにする必要があります。通常はHeight="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ActualHeight}"を使用します(ActualHeightではなくRenderSize.ActualHeightになる可能性があります...忘れました。

別の代替方法は、DockPanelの代わりにGridを使用することです。これは、そのコントロールがその内容に合わせて自動拡張しないためです。代わりに、最後の子を引き伸ばして残りのスペースを埋めます。

39
Rachel

同じ問題がありましたが、ウィンドウの高さにバインドしても問題は完全には解決しませんでした。私の場合、DataGridはウィンドウの表示可能領域よりも2〜3インチ下に広がっています。これは、私のDataGridがウィンドウの上部から約2〜3インチ下から始まったためだと思います。

最終的に、DataGridの高さをバインドする必要はまったくないことがわかりました。私がしなければならなかったのは、DataGridの直接コンテナーを変更することだけでした。

私にとって、次のXAMLセットアップでは、十分な行が追加されると、DataGridがウィンドウのサイズを超えて拡張されます。 DataGridがStackPanel内にあることに注意してください。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="75"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="0">
       <!-- StackPanel Content accounting for about 2-3 inches of space -->
    </StackPanel>
    <!-- DataGrid within a StackPanel extends past the vertical space of the Window
     and does not display vertical scroll bars.  Even if I bind the height to Window 
     height the DataGrid content still extends 2-3 inches past the viewable Window area-->
    <StackPanel Grid.Row="1">
    <DataGrid ItemsSource="{StaticResource ImportedTransactionList}" 
         Margin="10,20,10,10" MinHeight="100">
    </DataGrid>
    </StackPanel>
</Grid>

ただし、StackPanelを削除するだけで問題は解決しました。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="75"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="0">
       <!-- StackPanel Content accounting for about 2-3 inches of space -->
    </StackPanel>
    <!-- Removing the StackPanel fixes the issue-->
    <DataGrid Grid.Row="1" ItemsSource="{StaticResource SomeStaticResource}" 
           Margin="10,20,10,10" MinHeight="100">
    </DataGrid>
</Grid>

元の投稿はかなり古いので、私はVS2017と.Net Framework 4.6.1を使用していることに注意する必要がありますが、これに関連があるかどうかはわかりません。

1
Shimeon

DataGridが*である列と行を定義する必要があります。あなたはそれが左下のセルにあると言います。行は問題ありませんが、そこの列にはWidth="Auto"があります。

AutoGenerateColumns=TrueWidth="Auto"の場合に混乱を与えます。

0
Dummy01