none
WPF DataGridを多段表示したときにセルが選択できない RRS feed

  • 質問

  • WPFでDataGridを多段表示を含めたセルを表示して、DataGrid内で表示・修正・追加をしたいと思っています。

    DataGridを多段表示するところまでは出来たのですが、多段表示にすると一段のセル部分はセルが選択できるのに多段表示の部分はセルを

    選択することが出来なくなりました。ReadOnly="False"を試してみましたが効果がありませんでした。

    どのよにすれば選択可能になるのでしょうか?

    よろしくお願い致します。

    <!-- DataGrid全体のヘッダスタイル設定 -->
                <DataGrid.ColumnHeaderStyle>
                    <Style TargetType="DataGridColumnHeader">
                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
                    </Style>
                </DataGrid.ColumnHeaderStyle>
                <DataGrid.Columns>

                    <!-- オーダーの表示 -->
                    <DataGridTextColumn Header="オーダー" Width="100" Binding="{Binding Path=オーダー}" >
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="TextBlock">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="HorizontalAlignment" Value="Center"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                    </DataGridTextColumn>

                    <!-- 製品名/型式の表示 -->
                    <DataGridTemplateColumn Width ="150" >                 

                        <DataGridTemplateColumn.Header >
                            <StackPanel Orientation="Vertical">
                                <TextBlock Text="品名" VerticalAlignment="Center" HorizontalAlignment="Center" />
                                <Border Grid.Row="1" BorderThickness="0,0,0,1"  BorderBrush="Gray"/>
                                <TextBlock Text="型式" VerticalAlignment="Center" HorizontalAlignment="Center"/>
                            </StackPanel>
                        </DataGridTemplateColumn.Header>
                        
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate >
                                <StackPanel Orientation="Vertical" Margin="0" VerticalAlignment="Center">
                                    <TextBlock Text="{Binding 品名}" Height="25"  Padding="5,7,5,2" />
                                    <Border BorderThickness="0,0,0,1"  BorderBrush="Gray"/>
                                    <TextBlock Text="{Binding 型式}" Height="25" Padding="5,7,5,2" FontWeight="Normal" />
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

    2021年4月15日 5:08

回答

  • CellEditiongTemplateも追加します

    <!-- 製品名/型式の表示 -->
    <DataGridTemplateColumn Width ="150" >
    
        <DataGridTemplateColumn.Header >
            <StackPanel Orientation="Vertical">
                <TextBlock Text="品名" VerticalAlignment="Center" HorizontalAlignment="Center" />
                <Border Grid.Row="1" BorderThickness="0,0,0,1"  BorderBrush="Gray"/>
                <TextBlock Text="型式" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            </StackPanel>
        </DataGridTemplateColumn.Header>
    
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate >
                <StackPanel Orientation="Vertical" Margin="0" VerticalAlignment="Center">
                    <TextBlock Text="{Binding 品名}" Height="25"  Padding="5,7,5,2" />
                    <Border BorderThickness="0,0,0,1"  BorderBrush="Gray"/>
                    <TextBlock Text="{Binding 型式}" Height="25" Padding="5,7,5,2" FontWeight="Normal" />
                </StackPanel>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    
        <!-- CellEditingTemplateも定義する -->
        <!-- CellEditingTemplateはセルを編集する状態になったときに適用される -->
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate >
                <StackPanel Orientation="Vertical" Margin="0" VerticalAlignment="Center">
                    <!-- こっちはTexBoxに -->
                    <TextBox Text="{Binding 品名}" Height="25"  Padding="5,7,5,2" />
                    <Border BorderThickness="0,0,0,1"  BorderBrush="Gray"/>
                    <TextBox Text="{Binding 型式}" Height="25" Padding="5,7,5,2" FontWeight="Normal" />
                </StackPanel>
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>
    #CellTemplateのほうのTextBlockをTextBoxにしてしまうことも可能だけど


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク Piggy0078 2021年4月16日 4:19
    2021年4月15日 9:23

すべての返信

  • CellEditiongTemplateも追加します

    <!-- 製品名/型式の表示 -->
    <DataGridTemplateColumn Width ="150" >
    
        <DataGridTemplateColumn.Header >
            <StackPanel Orientation="Vertical">
                <TextBlock Text="品名" VerticalAlignment="Center" HorizontalAlignment="Center" />
                <Border Grid.Row="1" BorderThickness="0,0,0,1"  BorderBrush="Gray"/>
                <TextBlock Text="型式" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            </StackPanel>
        </DataGridTemplateColumn.Header>
    
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate >
                <StackPanel Orientation="Vertical" Margin="0" VerticalAlignment="Center">
                    <TextBlock Text="{Binding 品名}" Height="25"  Padding="5,7,5,2" />
                    <Border BorderThickness="0,0,0,1"  BorderBrush="Gray"/>
                    <TextBlock Text="{Binding 型式}" Height="25" Padding="5,7,5,2" FontWeight="Normal" />
                </StackPanel>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    
        <!-- CellEditingTemplateも定義する -->
        <!-- CellEditingTemplateはセルを編集する状態になったときに適用される -->
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate >
                <StackPanel Orientation="Vertical" Margin="0" VerticalAlignment="Center">
                    <!-- こっちはTexBoxに -->
                    <TextBox Text="{Binding 品名}" Height="25"  Padding="5,7,5,2" />
                    <Border BorderThickness="0,0,0,1"  BorderBrush="Gray"/>
                    <TextBox Text="{Binding 型式}" Height="25" Padding="5,7,5,2" FontWeight="Normal" />
                </StackPanel>
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>
    #CellTemplateのほうのTextBlockをTextBoxにしてしまうことも可能だけど


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク Piggy0078 2021年4月16日 4:19
    2021年4月15日 9:23
  • 回答ありがとうございます。

    CELLを選択しても状態が単一セルと違い反応がなかったのでCellEditingTempleteは使用出来なかったと思ったのですが使用出来るのですね。ただTextBlockとしては処理できないのでTextBoxを使用して代替え動作になるのですね。

    勉強になりました。

    ありがとうございました。

    2021年4月16日 4:19