none
DataGrid グループ化時の行頭の空白について RRS feed

  • 質問

  • DataGrid コントロールでデータをグループ化の例に従って実装を行い、DataGridのHeadersVisibilityをcolumnにした場合、行の先頭に空白があり、カラムの罫線とセルの罫線がずれてしまいます。

    行の先頭部分の空白を非表示にする方法はないのでしょうか。

    • 編集済み eru.tndl 2014年6月18日 13:52
    2014年6月18日 13:50

回答

  • 例というのはhttp://msdn.microsoft.com/ja-jp/library/ff407126%28v=vs.110%29.aspxのサンプルのことでしょうか?

    とりあえずGroupStyleをちょっと変えてみて消してみる

    <!-- Style for groups at top level. -->
    <GroupStyle>
        <GroupStyle.ContainerStyle>
            <Style TargetType="{x:Type GroupItem}">
                <Setter Property="Margin" Value="0,0,0,5"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GroupItem}">
                            <Expander IsExpanded="True" Background="#FF112255" BorderBrush="#FF002255" Foreground="#FFEEEEEE" BorderThickness="1,1,1,5">
                                <Expander.Header>
                                    <DockPanel>
                                        <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" Margin="5,0,0,0" Width="100"/>
                                        <TextBlock FontWeight="Bold" Text="{Binding Path=ItemCount}"/>
                                    </DockPanel>
                                </Expander.Header>
                                <Expander.Content>
                                    <!-- このItemsPresenterで行が表示される -->
                                    <!-- この内側でMarginが設定されていて右に寄ってるらしい-->
                                    <!-- とりあえずマイナスマージンを設定して打ち消してみる-->
                                    <ItemsPresenter Margin="-5,0,0,0" />
                                </Expander.Content>
                            </Expander>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </GroupStyle.ContainerStyle>
    </GroupStyle>

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

    • 回答としてマーク eru.tndl 2014年6月19日 1:30
    2014年6月18日 15:59

すべての返信

  • 例というのはhttp://msdn.microsoft.com/ja-jp/library/ff407126%28v=vs.110%29.aspxのサンプルのことでしょうか?

    とりあえずGroupStyleをちょっと変えてみて消してみる

    <!-- Style for groups at top level. -->
    <GroupStyle>
        <GroupStyle.ContainerStyle>
            <Style TargetType="{x:Type GroupItem}">
                <Setter Property="Margin" Value="0,0,0,5"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GroupItem}">
                            <Expander IsExpanded="True" Background="#FF112255" BorderBrush="#FF002255" Foreground="#FFEEEEEE" BorderThickness="1,1,1,5">
                                <Expander.Header>
                                    <DockPanel>
                                        <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" Margin="5,0,0,0" Width="100"/>
                                        <TextBlock FontWeight="Bold" Text="{Binding Path=ItemCount}"/>
                                    </DockPanel>
                                </Expander.Header>
                                <Expander.Content>
                                    <!-- このItemsPresenterで行が表示される -->
                                    <!-- この内側でMarginが設定されていて右に寄ってるらしい-->
                                    <!-- とりあえずマイナスマージンを設定して打ち消してみる-->
                                    <ItemsPresenter Margin="-5,0,0,0" />
                                </Expander.Content>
                            </Expander>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </GroupStyle.ContainerStyle>
    </GroupStyle>

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

    • 回答としてマーク eru.tndl 2014年6月19日 1:30
    2014年6月18日 15:59
  • 解決しましたありがとうございます。

    DataGirdRowや、DataGridCellなどのクラスのStyleをあれこれしても、この「行の先頭部分の空白」がなぜ描画されているのか不明だったのですが、安易にItemsPresenter部分のMarginで解決していいものか悩んでおりました。

    実際にMarginが指定されている部分がわかればスッキリするのですが、動作確認の限り特に影響はでなさそうのでご教示頂いた内容でやってみようと思います。

    2014年6月19日 1:35