1

多数の DataGridTemplateColumns を含む DataGrid があります。これらの 1 つは Width="*" を持ち、残りは Width="Auto" を持ちます。ほとんどの場合、TextBox が含まれているだけです。各要素の両側にマージンが必要なので、TextBox に割り当てられたスタイルで Margin="10,1" を使用しました。私が観察したのは、DataGrid の初期幅が広すぎるということでした。ウィンドウを手動で細くすると、DataGrid も細くなりますが、幅は維持されます。ウィンドウが大きくなった場合、幅が正しくなるまで DataGrid は広くならず、それ以降はサイズ変更が正しく機能します。

スタイルからマージンを削除し、各列の TextBox に明示的に配置すると、すべてが期待どおりに機能するため、問題は解決します。しかし、これらの余白を変更したい場合は、1 つのスタイルを変更する方がはるかに優れているため、何が起こっているのかを知りたいと思います。これは DataGrid の奇妙なバグですか、それとも私が正しく理解していないものですか?

DataGrid は他のいくつかのアイテム内にネストされていますが、修正が非常に簡単であるため、DataGrid とスタイルだけが重要な要素であると思われます。

列は次のようになります。

<DataGridTemplateColumn x:Name="SKUColumn"
            Header="SKU" 
            Width="Auto">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox x:Name="skuText"
                     Text="{Binding Path=SKU, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                     Style="{StaticResource textBodyCell}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

textBodyCell は次のようになります。

<Style x:Key="textBodyCell" TargetType="{x:Type TextBox}">
    <Setter Property="FontSize"
            Value="{StaticResource bodySize}" />
    <Setter Property="TextWrapping" Value="NoWrap"/>
    <Setter Property="AcceptsReturn" Value="False"/>
    <Setter Property="Margin" Value="10,1"/>
    <Setter Property="Template" Value="{DynamicResource DataGridCellTextBox}"/>

</Style>

DataGridCellTextBox はどこにありますか

<ControlTemplate x:Key="DataGridCellTextBox" TargetType="{x:Type TextBoxBase}">

    <ScrollViewer x:Name="PART_ContentHost" Foreground="{StaticResource DataGridUnSelectedRowForeground}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>

    <ControlTemplate.Triggers>
        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}}" Value="True">
            <Setter Property="Foreground"  Value="{StaticResource DataGridSelectedRowForeground}" />
        </DataTrigger>
            <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}}" Value="False">
            <Setter Property="Foreground"  Value="{StaticResource DataGridUnSelectedRowForeground}" />
        </DataTrigger>          

        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>
4

0 に答える 0