0

所以我试图覆盖 ResourceDictionary 中定义的模板中的默认值。默认对齐方式是左对齐,但我希望左列标题右对齐,右列标题左对齐。其余数据对齐良好。

目前,这就是我所拥有的:

<ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="../Controls/CustomDataGrid.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <Style x:Key="CellTextStyleR" TargetType="TextBlock">
            <Setter Property="TextWrapping" Value="Wrap"/>
            <Setter Property="TextAlignment" Value="Right"/>
            <Setter Property="Margin" Value="2,0,5,0"/>
        </Style>
        <Style x:Key="CellTextStyleL" TargetType="TextBlock">
            <Setter Property="TextWrapping" Value="Wrap"/>
            <Setter Property="TextAlignment" Value="Left"/>
            <Setter Property="Margin" Value="5,0,0,0"/>
        </Style>

        <Style x:Key="HeaderRight" TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource DataGridColumnHeaderStyle}">
            <Setter Property="HorizontalContentAlignment" Value="Right"/>
            <Setter Property="Margin" Value="2,0,5,0"/>
        </Style>

        <Style x:Key="HeaderLeft" TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource DataGridColumnHeaderStyle}">
            <Setter Property="HorizontalContentAlignment" Value="Left"/>
            <Setter Property="Margin" Value="5,0,0,0"/>
        </Style>

    </ResourceDictionary>
</UserControl.Resources>

<Grid>


    <DataGrid Grid.Row="0" Grid.Column="1" Style="{StaticResource CustomDataGridStyle}" ItemsSource="{Binding InputDataCollection}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Input Name" Binding="{Binding Name}" Width="50*" ElementStyle="{StaticResource CellTextStyleR}" HeaderStyle="{StaticResource HeaderRight}"/>
            <DataGridTextColumn Header="Input State" Binding="{Binding State}" Width="50*" ElementStyle="{StaticResource CellTextStyleL}" HeaderStyle="{StaticResource HeaderLeft}"/>
        </DataGrid.Columns>
    </DataGrid>

相反,列文本保持左对齐。

我也尝试过直接在数据网格中定义,但这只会杀死所有格式......

有没有办法只覆盖对齐和边距,而不杀死所有其他格式?

提前谢谢你的帮助!

4

2 回答 2

0

在键盘上敲了很多次之后,这是我最终得到的解决方案:

我更改了样式“HeaderLeft”和“HeaderRight”,使它们不再基于 CustomDataGrid.xaml 的 DataGridColumnHeaderStyle。

相反,我将 DataGridColumnHeaderStyle 中的内容复制粘贴到这些样式中,并更改了我需要在其中更改的设置。

不是我希望的优雅解决方案,但是嘿,如果它有效......

于 2015-08-07T18:55:37.277 回答
0

对于细胞尝试Control.HorizontalAlignment这样:

<Style x:Key="CellRightAlign">
    <Setter Property="Control.HorizontalAlignment"
            Value="Right" />
</Style>

<Style x:Key="CellLeftAlign">
    <Setter Property="Control.HorizontalAlignment"
            Value="Left" />
</Style>

<DataGrid Grid.Row="0" Grid.Column="1" Style="{StaticResource CustomDataGridStyle}" ItemsSource="{Binding InputDataCollection}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Input Name" Binding="{Binding Name}" Width="50*" ElementStyle="{StaticResource CellRightAlign}" HeaderStyle="{StaticResource HeaderRight}"/>
            <DataGridTextColumn Header="Input State" Binding="{Binding State}" Width="50*" ElementStyle="{StaticResource CellLeftAlign}" HeaderStyle="{StaticResource HeaderLeft}"/>
        </DataGrid.Columns>
    </DataGrid>

对于标题,您可能需要删除 BasedOn。我在你的问题中看不到这些风格......

于 2015-08-06T17:20:34.677 回答