質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

14779閲覧

WPF Datagirdの幅に合わせたColumns幅の自動調整

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

0クリップ

投稿2020/05/29 06:31

編集2020/05/29 06:32

WPFではDataGridの幅を指定しないとき、Columnsの幅は自動的にセルの値に応じた幅になります。

ですが、Columnsの幅をDatagridの幅に応じた適当な幅に自動でリサイズを行うことはできるのでしょうか。

色々探しましたがみあたりませんでした。

手動でDataGrid.Columnsの幅を変えるで調整はできるのですが、ウィンドウのサイズを変えたときに自動でColumnsの幅を調整したいです。

参考になる記事やサンプルソース等あれば教えていただけると助かります。

宜しくお願い致します。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GridColumnDefinition.Widthのように、DataGridColumn.WidthAutoPixel(数値)以外に、StarSizeToCellsSizeToHeaderも指定できます。
水平スクロールバーがチラチラ出るので、消したほうがいいでしょう。

DataGrid コントロールのサイズ変更方法 # 列および列ヘッダーのサイズ変更 - WPF | Microsoft Docs

xml

1<Window 2 x:Class="Questions265873.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:System="clr-namespace:System;assembly=mscorlib" 6 Width="800" 7 Height="450"> 8 <Grid> 9 <DataGrid AutoGenerateColumns="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 10 <DataGrid.Columns> 11 <DataGridTextColumn 12 Width="Auto" 13 Binding="{Binding}" 14 Header="Auto" /> 15 <DataGridTextColumn 16 Width="SizeToHeader" 17 Binding="{Binding}" 18 Header="SizeToHeader" /> 19 <DataGridTextColumn 20 Width="SizeToCells" 21 Binding="{Binding}" 22 Header="SizeToCells" /> 23 <DataGridTextColumn 24 Width="200" 25 Binding="{Binding}" 26 Header="Pixel200" /> 27 <DataGridTextColumn 28 Width="*" 29 Binding="{Binding}" 30 Header="Star" /> 31 <DataGridTextColumn 32 Width="2*" 33 Binding="{Binding}" 34 Header="2Star" /> 35 </DataGrid.Columns> 36 <System:String>aaaa</System:String> 37 <System:String>aaaaaaaaa</System:String> 38 </DataGrid> 39 </Grid> 40</Window>

アプリ画像

投稿2020/05/29 08:49

編集2023/07/22 07:20
TN8001

総合スコア9321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/29 16:34

こちらの質問に関してもご回答ありがとうございます!大変勉強になっております。 https://teratail.com/questions/265873 ご提示いただいた方法ですと確かにDataGridに対して、列幅が割合などできめられます。 ですが、DataGridの幅は固定です。固定にしてしまうと画面サイズ(私の場合はPage)変更時にDataGridのサイズは変わりません。 DataGridの列をすべて比率指定、DataGridと画面(私の場合はPage)の幅を指定しないようにすれば 画面サイズ変更→自動でDataGridの幅が変更→DataGridの列がリサイズ といった動作を実現できるのですが、初期表示時のDataGridの幅だけ納得いきません... なぜかDataGridの幅がモニターの画面一杯になってしまいます。 そもそもすべて比率指定でDataGridも幅を指定していないので、何をもとに幅をきめてるのか不明ですが笑 初期表示時はDataGridの幅を指定して、その後はサイズを可変などにすることはできるのでしょうか?
TN8001

2020/05/29 21:17

Windowが SizeToContent="WidthAndHeight" か SizeToContent="Width" になってるってことでしょうか? SizeToContent を入れる場面は、ダイアログ等固定サイズのWindowに使って「Windowを中身にぴったりフィットさせる」ということだと認識しています。 SizeToContent を入れることとリサイズ可能なことがそもそも矛盾していて、結果モニター一杯になっていると思われます。 Windowを <Window Width="800" Height="450" SizeToContent="Manual" ResizeMode="CanResize"> このようにはできませんか?("Manual" "CanResize"はデフォルト値なので無指定と同じ) Width="800" Height="450"が初期サイズで、リサイズもできますしカラム幅も追従します。 実運用ではWindow Width Height等は終了時に設定ファイルに保存し、次回起動時はその位置サイズで起動するのが普通かなとは思います。
退会済みユーザー

退会済みユーザー

2020/05/29 23:39

SizeToContentを"Manual"に変えたところ治りました。こちらが原因でしたか..気づきませんでした。 ページやWindowsのサイズチェンジイベントから原因探せないものかずっと調査するという無駄な時間を送っていました笑 UIはもう少し基礎を身につけないと原因特定するのが難しいですね。 大変勉強になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問