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

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

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

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

Q&A

解決済

1回答

7359閲覧

WPFのDataGridで複数行のヘッダをxamlで設定したい

takosuke33

総合スコア16

WPF

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

0グッド

0クリップ

投稿2020/07/10 02:16

WPFのDataGridで複数行のヘッダをxamlで設定したいのですがうまくいきません。
コードにてヘッダに行の追加は出来たのですが、xamlで実現したいのです。
どのようにすればxamlで実現できるでしょうか。

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

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

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

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

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

TN8001

2020/07/10 08:48

ヘッダーの文字列を改行するという意味ですか? つまりコードでやったのはこのようなことですか。 dataGridColumn.Header = "Header\nHeader";
takosuke33

2020/07/10 09:02

改行ではなくヘッダのRowを複数にしたいのです。
TN8001

2020/07/11 15:22

完璧は言い過ぎでしたね。有償の製品が売れなくなってしまいます^^; どういう要件かがわからない状態で回答しようとすると「ここが思っていたのと違います」となりがちで、回答コードに完璧さが求められてしまう。という意図です。 コードがあれば何がやりたいのかがすぐわかるので、ピンポイントで回答できます。 内容によってはxamlだけでは無理ってことも当然あり得ます。
takosuke33

2020/07/22 08:41

お時間が経ってしまい申し訳ございません。 無理そうだということはわかりました。 違う方法を模索してみます。 この度はありがとうございました。
guest

回答1

0

ベストアンサー

多段のカラムヘッダーがやりたいと仮定してちょっと考えてみました。

  • カラムサイズ変更・カラム入れ替えを禁止。
  • サイズは比率指定のみ(DataGrid自体のサイズは変わるが横スクロールバーが出ない状態)
  • 横スクロールバー常に非表示・縦スクロールバー常に表示

という限定された条件なら、ヘッダーのみのダミーDataGridを適当に積み重ねれば手軽に実現できますね(非常にバカバカしいですが^^;

xml

1<Window 2 x:Class="Questions276512.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:collections="clr-namespace:System.Collections;assembly=mscorlib" 6 xmlns:sys="clr-namespace:System;assembly=mscorlib" 7 Width="800" 8 Height="400"> 9 <Window.Resources> 10 <!-- 特に意味はない xamlのみ縛り --> 11 <collections:ArrayList x:Key="data"> 12 <collections:DictionaryEntry Key="仙台支店"> 13 <collections:DictionaryEntry.Value> 14 <collections:ArrayList> 15 <sys:Int32>1</sys:Int32> 16 <sys:Int32>2</sys:Int32> 17 <sys:Int32>3</sys:Int32> 18 </collections:ArrayList> 19 </collections:DictionaryEntry.Value> 20 </collections:DictionaryEntry> 21 <collections:DictionaryEntry Key="東京本店"> 22 <collections:DictionaryEntry.Value> 23 <collections:ArrayList> 24 <sys:Int32>10</sys:Int32> 25 <sys:Int32>20</sys:Int32> 26 <sys:Int32>30</sys:Int32> 27 </collections:ArrayList> 28 </collections:DictionaryEntry.Value> 29 </collections:DictionaryEntry> 30 </collections:ArrayList> 31 32 <Style TargetType="DataGridColumnHeader"> 33 <Setter Property="HorizontalContentAlignment" Value="Center" /> 34 </Style> 35 </Window.Resources> 36 37 <Border 38 Margin="10" 39 BorderBrush="#FF688CAF" 40 BorderThickness="1"> 41 <Grid> 42 <Grid.RowDefinitions> 43 <RowDefinition Height="Auto" /> 44 <RowDefinition Height="Auto" /> 45 <RowDefinition /> 46 </Grid.RowDefinitions> 47 48 <!-- 偽ヘッダー1 --> 49 <Grid Background="#FFF0F0F0"> 50 <Grid.ColumnDefinitions> 51 <ColumnDefinition Width="Auto" /> 52 <ColumnDefinition /> 53 <ColumnDefinition Width="Auto" /> 54 </Grid.ColumnDefinitions> 55 <Border Width="{Binding RowHeaderActualWidth, ElementName=datagrid1, Mode=OneWay}" Visibility="{Binding VerticalScrollBarVisibility, ElementName=datagrid1}" /> 56 <DataGrid 57 Grid.Column="1" 58 BorderThickness="0" 59 CanUserReorderColumns="False" 60 CanUserResizeColumns="False" 61 CanUserSortColumns="False"> 62 <DataGrid.Columns> 63 <DataGridTextColumn Width="*" Header="2020年度" /> 64 </DataGrid.Columns> 65 </DataGrid> 66 <ScrollBar Grid.Column="2" Visibility="Hidden" /> 67 </Grid> 68 69 <!-- 偽ヘッダー2 --> 70 <Grid Grid.Row="1" Background="#FFF0F0F0"> 71 <Grid.ColumnDefinitions> 72 <ColumnDefinition Width="Auto" /> 73 <ColumnDefinition /> 74 <ColumnDefinition Width="Auto" /> 75 </Grid.ColumnDefinitions> 76 <Border Width="{Binding RowHeaderActualWidth, ElementName=datagrid1, Mode=OneWay}" /> 77 <DataGrid 78 Grid.Column="1" 79 BorderThickness="0" 80 CanUserReorderColumns="False" 81 CanUserResizeColumns="False" 82 CanUserSortColumns="False"> 83 <DataGrid.Columns> 84 <DataGridTextColumn Width="*" Header="第一四半期" /> 85 <DataGridTextColumn Width="*" Header="第二四半期" /> 86 <DataGridTextColumn Width="*" Header="第三四半期" /> 87 <DataGridTextColumn Width="*" Header="第四四半期" /> 88 </DataGrid.Columns> 89 </DataGrid> 90 <ScrollBar Grid.Column="2" Visibility="Hidden" /> 91 </Grid> 92 93 <!-- 本体 --> 94 <DataGrid 95 Name="datagrid1" 96 Grid.Row="2" 97 AutoGenerateColumns="False" 98 BorderThickness="0" 99 CanUserReorderColumns="False" 100 CanUserResizeColumns="False" 101 HeadersVisibility="All" 102 HorizontalScrollBarVisibility="Disabled" 103 ItemsSource="{StaticResource data}" 104 VerticalScrollBarVisibility="Visible"> 105 <DataGrid.RowHeaderStyle> 106 <Style TargetType="{x:Type DataGridRowHeader}"> 107 <Setter Property="Content" Value="{Binding Key}" /> 108 </Style> 109 </DataGrid.RowHeaderStyle> 110 <DataGrid.Columns> 111 <DataGridTextColumn 112 Width="*" 113 Binding="{Binding Value[0]}" 114 Header="4月" /> 115 <DataGridTextColumn 116 Width="*" 117 Binding="{Binding Value[1]}" 118 Header="5月" /> 119 <DataGridTextColumn 120 Width="*" 121 Binding="{Binding Value[2]}" 122 Header="6月" /> 123 <DataGridTextColumn 124 Width="*" 125 Binding="{Binding Value[3]}" 126 Header="7月" /> 127 <DataGridTextColumn 128 Width="*" 129 Binding="{Binding Value[4]}" 130 Header="8月" /> 131 <DataGridTextColumn 132 Width="*" 133 Binding="{Binding Value[5]}" 134 Header="9月" /> 135 <DataGridTextColumn 136 Width="*" 137 Binding="{Binding Value[6]}" 138 Header="10月" /> 139 <DataGridTextColumn 140 Width="*" 141 Binding="{Binding Value[7]}" 142 Header="11月" /> 143 <DataGridTextColumn 144 Width="*" 145 Binding="{Binding Value[8]}" 146 Header="12月" /> 147 <DataGridTextColumn 148 Width="*" 149 Binding="{Binding Value[9]}" 150 Header="1月" /> 151 <DataGridTextColumn 152 Width="*" 153 Binding="{Binding Value[10]}" 154 Header="2月" /> 155 <DataGridTextColumn 156 Width="*" 157 Binding="{Binding Value[11]}" 158 Header="3月" /> 159 </DataGrid.Columns> 160 </DataGrid> 161 </Grid> 162 </Border> 163</Window>

無駄にxamlのみ縛りしたのと見た目にこだわったので、少し長くなりましたがやってることは単純です。
アプリ画像


しかし個人的にはこれでは使う気になれないです^^;
なんとかカラムサイズ変更だけは可能にしたいと思い、頑張っていたのですがIMultiValueConverterだけは書く必要がありますねぇ(上下のサイズ変更が追従する。ここまでは検証済み)

横スクロール連動となるとビヘイビアにするよりなさそうですし、この先は未検証です。

投稿2020/07/11 15:46

編集2023/07/22 09:00
TN8001

総合スコア9317

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問