WPFのDataGridで複数行のヘッダをxamlで設定したいのですがうまくいきません。
コードにてヘッダに行の追加は出来たのですが、xamlで実現したいのです。
どのようにすればxamlで実現できるでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/10 09:02
2020/07/10 09:22
2020/07/11 15:22
2020/07/22 08:41
回答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総合スコア9862
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。