0

次のコードを使用して、データグリッドのセルの中央にテキストを表示します。

    <Style x:Key="CenteredTextColumn" TargetType="{x:Type DataGridCell}">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="BorderBrush" Value="Transparent"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridCell}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                        <ContentPresenter VerticalAlignment="Center" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="VerticalAlignment" Value="Stretch"/>
        <Setter Property="HorizontalAlignment" Value="Stretch"/>
        <Setter Property="Foreground" Value="Black">                
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="#FFE3ECF7" Offset="0"/>
                            <GradientStop Color="#FF71DDF9" Offset="1"/>
                            <GradientStop Color="#FF5091DC" Offset="0.546"/>
                        </LinearGradientBrush>
                    </Setter.Value>
            </Setter>
                <Setter Property="Foreground" Value="White"/>
                <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
            </Trigger>
            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/>
            </Trigger>                  
        </Style.Triggers>
    </Style>

セルの内容を編集しているときは次のようになりますが、問題なく動作します。

テキストボックスが小さすぎます

セッターを使用してtextBoxのサイズを変更できます。

          <Trigger Property="IsEditing" Value="True">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridCell}">
                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                                <ContentPresenter VerticalAlignment="Stretch" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>               
            </Trigger>

ただし、これにより、テキストボックス内のテキストが上に移動します。

間違った場所のテキスト

テキストも移動せずにセル全体を取得するようにテキストボックスを作成するにはどうすればよいですか?

更新次のテンプレートを使用する場合:

<ControlTemplate TargetType="{x:Type DataGridCell}">
                    <Grid VerticalAlignment="Center">
                        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <ContentPresenter VerticalAlignment="Stretch" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                    </Grid>
                </ControlTemplate>

グリッドの選択が精査されます:

ここに画像の説明を入力してください

4

1 に答える 1

1

引き伸ばされたグリッドに配置しますか?ただし、各セルに追加のコントロールが追加されます。

<ControlTemplate TargetType="{x:Type DataGridCell}">
        <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="White">
            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                <ContentPresenter VerticalAlignment="Center" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
            </Border>
        </Grid>
    </ControlTemplate>

また、スクリーンショットのおかげで、DataGridのSelectionUnitは行のように見えますが、それはアプリに必要ですか?そうでない場合は、SelectionUnit = "Cell"を指定し、アクティブな選択範囲の色を強制的に白にすることも問題を解決します。

于 2012-04-12T18:03:19.523 に答える