🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

Q&A

解決済

1回答

880閲覧

headerが複数ある入力表を作りたい

wakaranchin

総合スコア15

C#

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

0グッド

0クリップ

投稿2020/11/25 08:20

前提・実現したいこと

WPFでシステムを作っており、表作成で躓いてしまいました。
表を作成し、その中に情報を入れていくページを作成したいと思い、試行錯誤したのですが、なかなかうまくいかず質問させていただきます。

イメージ説明
↑このような表を作ろうと思っています。
ヘッダーを複数個作る方法を調べてみたのですがいまいちわかりませんでした。

補足情報(FW/ツールのバージョンなど)

Visual Studio 2019

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

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

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

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

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

TN8001

2020/11/25 09:13

DataGridの話ですかね?それとも編集する気はなくって表示だけの話でしょうか。 DataGridは過去に一度回答したんですが、なかなか難しいです。 有償の製品を検討したほうがいいかもしれません。 [WPF - WPFのDataGridで複数行のヘッダをxamlで設定したい|teratail](https://teratail.com/questions/276512 「カラムサイズ変更だけは可能版」も手元にはあるんですが、だいぶ怪しいです^^;
wakaranchin

2020/11/25 10:08

DataGridで作成しています。やはり難しいんですね...DataGrid以外のツールを作って表のようにするということも難しいですかね...?
TN8001

2020/11/25 11:05

ヘッダーのリサイズや入れ替えがなければ、まあどうにでもなりますが、 そうではないなら自作するしかないと思います。 > DataGrid以外のツールを作って表のようにするということも難しいですかね...? 画像を見る限りDataGrid以外に使えそうなものはなさそうに見えますが、 本来やりたいことは少し違ったりするんですか?(例えば役所に出す書類のようなイメージとか) 無償にこだわる場合はWeb系の方面なら、何かいいものがあるのかもしれません(知らないですが) それをWebBrowserで出すとか?(もうWPFと言えないですが^^;
wakaranchin

2020/11/26 00:05 編集

>ヘッダーのリサイズや入れ替えがなければ、まあどうにでもなりますが というのはheaderの部分だけ画面レイアウトを作ってしまって入力の部分だけDataGridを使うとかですかね?←自分で探している時にこの方法を見ました。 社内システムを作っていて、この部分以外作成が終わっているのでWPFにはこだわりたいです…;;
guest

回答1

0

ベストアンサー

ヘッダーのリサイズや入れ替えをさせないのであれば、Grid等で偽のヘッダーをでっちあげます。

できるだけ画像に寄せましたが、こんな感じでどうでしょうか?

xml

1<Window 2 x:Class="Questions306366.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="450"> 9 <Window.Resources> 10 <!-- 特に意味はない xamlのみ縛り --> 11 <collections:ArrayList x:Key="data"> 12 <collections:ArrayList> 13 <sys:Int32>1</sys:Int32> 14 <sys:String>一郎</sys:String> 15 <sys:DateTime>1998-01-01</sys:DateTime> 16 <sys:Int32>22</sys:Int32> 17 <sys:String></sys:String> 18 <sys:String></sys:String> 19 <sys:String></sys:String> 20 <sys:String></sys:String> 21 </collections:ArrayList> 22 <collections:ArrayList> 23 <sys:Int32>2</sys:Int32> 24 <sys:String>次郎</sys:String> 25 <sys:DateTime>1999-02-02</sys:DateTime> 26 <sys:Int32>21</sys:Int32> 27 <sys:String></sys:String> 28 <sys:String></sys:String> 29 <sys:String></sys:String> 30 <sys:String></sys:String> 31 </collections:ArrayList> 32 </collections:ArrayList> 33 34 <Style TargetType="DataGridColumnHeader"> 35 <Setter Property="HorizontalContentAlignment" Value="Center" /> 36 </Style> 37 <Style x:Key="CellStyleRight" TargetType="DataGridCell"> 38 <Setter Property="TextBlock.TextAlignment" Value="Right" /> 39 </Style> 40 </Window.Resources> 41 42 <Grid> 43 <DockPanel> 44 <!-- 偽ヘッダー --> 45 <Grid 46 Margin="1,1,1,0" 47 Cursor="Arrow" 48 DockPanel.Dock="Top" 49 ForceCursor="True"> 50 <Grid.ColumnDefinitions> 51 <ColumnDefinition Width="Auto" /> 52 <ColumnDefinition Width="Auto" /> 53 <ColumnDefinition Width="Auto" /> 54 <ColumnDefinition Width="Auto" /> 55 <ColumnDefinition Width="Auto" /> 56 <ColumnDefinition Width="Auto" /> 57 <ColumnDefinition Width="Auto" /> 58 <ColumnDefinition Width="Auto" /> 59 <ColumnDefinition /> 60 </Grid.ColumnDefinitions> 61 <Grid.RowDefinitions> 62 <RowDefinition /> 63 <RowDefinition /> 64 <RowDefinition /> 65 </Grid.RowDefinitions> 66 <DataGridColumnHeader Grid.RowSpan="3" Width="{Binding ActualWidth, ElementName=NumberColumn}" Content="番号" /> 67 <DataGridColumnHeader 68 Grid.Row="1" 69 Grid.RowSpan="2" 70 Grid.Column="1" 71 Width="{Binding ActualWidth, ElementName=NameColumn}" 72 Content="名前" /> 73 <DataGridColumnHeader 74 Grid.Row="1" 75 Grid.RowSpan="2" 76 Grid.Column="2" 77 Width="{Binding ActualWidth, ElementName=DOBColumn}" 78 Content="生年月日" /> 79 <DataGridColumnHeader 80 Grid.Row="1" 81 Grid.RowSpan="2" 82 Grid.Column="3" 83 Width="{Binding ActualWidth, ElementName=AgeColumn}" 84 Content="年齢" /> 85 <DataGridColumnHeader 86 Grid.Row="2" 87 Grid.Column="4" 88 Width="{Binding ActualWidth, ElementName=DDDDColumn}" 89 Content="DDDD" /> 90 <DataGridColumnHeader 91 Grid.Row="2" 92 Grid.Column="5" 93 Width="{Binding ActualWidth, ElementName=EEEEColumn}" 94 Content="EEEE" /> 95 <DataGridColumnHeader 96 Grid.Row="2" 97 Grid.Column="6" 98 Width="{Binding ActualWidth, ElementName=FFFFColumn}" 99 Content="FFFF" /> 100 <DataGridColumnHeader 101 Grid.Row="2" 102 Grid.Column="7" 103 Width="{Binding ActualWidth, ElementName=GGGGColumn}" 104 Content="GGGG" /> 105 106 <DataGridColumnHeader Grid.Column="1" Grid.ColumnSpan="3" Content="個人情報" /> 107 <DataGridColumnHeader Grid.Column="4" Grid.ColumnSpan="4" Content="AAAA" /> 108 <DataGridColumnHeader 109 Grid.Row="1" 110 Grid.Column="4" 111 Grid.ColumnSpan="2" 112 Content="BBBB" /> 113 <DataGridColumnHeader 114 Grid.Row="1" 115 Grid.Column="6" 116 Grid.ColumnSpan="2" 117 Content="CCCC" /> 118 <Border /> 119 </Grid> 120 121 <DataGrid AutoGenerateColumns="False" HeadersVisibility="None" ItemsSource="{StaticResource data}"> 122 <DataGrid.Columns> 123 <DataGridTextColumn 124 x:Name="NumberColumn" 125 Width="90" 126 Binding="{Binding [0]}" 127 CellStyle="{StaticResource CellStyleRight}" /> 128 <DataGridTextColumn x:Name="NameColumn" Width="90" Binding="{Binding [1]}" /> 129 <DataGridTextColumn 130 x:Name="DOBColumn" 131 Width="90" 132 Binding="{Binding [2], StringFormat=M月d日}" 133 CellStyle="{StaticResource CellStyleRight}" /> 134 <DataGridTextColumn 135 x:Name="AgeColumn" 136 Width="90" 137 Binding="{Binding [3]}" 138 CellStyle="{StaticResource CellStyleRight}" /> 139 <DataGridTextColumn x:Name="DDDDColumn" Width="90" Binding="{Binding [4]}" /> 140 <DataGridTextColumn x:Name="EEEEColumn" Width="90" Binding="{Binding [5]}" /> 141 <DataGridTextColumn x:Name="FFFFColumn" Width="90" Binding="{Binding [6]}" /> 142 <DataGridTextColumn x:Name="GGGGColumn" Width="90" Binding="{Binding [7]}" /> 143 </DataGrid.Columns> 144 </DataGrid> 145 </DockPanel> 146 </Grid> 147</Window>

アプリ画像

ソート機能を生かすにはDataGridColumnHeaderClickを拾い、ソースのソートをしてください。

小さいの字を出すには、↓はsetがないのでいじれませんが、
DataGridColumnHeader.SortDirection プロパティ (System.Windows.Controls.Primitives) | Microsoft Docs

DataGridColumnHeaderの子孫にいるこちらをいじれば表示されました。
DataGridHeaderBorder.SortDirection プロパティ (Microsoft.Windows.Themes) | Microsoft Docs

投稿2020/11/26 08:43

編集2023/07/25 13:18
TN8001

総合スコア9855

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問