所以我试图覆盖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>
相反,列文本保持左对齐。
我也尝试直接在datagrid中定义,但这只会杀死所有格式......
有没有办法覆盖对齐和边距,而不会删除所有其他格式?
提前感谢您的帮助!
答案 0 :(得分: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。我在你的问题中看不到那些风格......
答案 1 :(得分:0)
在敲击键盘之后,这是我最终解决的问题:
我改变了样式&#34; HeaderLeft&#34;和#34; HeaderRight&#34;这样他们就不再基于CustomDataGrid.xaml的DataGridColumnHeaderStyle。
相反,我将DataGridColumnHeaderStyle中的内容复制粘贴到这些样式中,并更改了我需要更改的设置。
不是我希望的优雅解决方案,但嘿,如果有效......