我正在基于Margaret Parsons article创建DataGrid角度标题样式。 现在它看起来像这样:
<Style x:Key="DataGridColumnHeaderAngle"
TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid x:Name="HeaderGrid" ShowGridLines="True"
Width="30">
<Rectangle Name="HeaderRect" Fill="Azure" Stroke="Black"
Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}">
<Rectangle.RenderTransform>
<SkewTransform CenterX="0" AngleX="-60" AngleY="0"
CenterY="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=ActualHeight }"/>
</Rectangle.RenderTransform>
</Rectangle>
<TextBlock Text="{TemplateBinding Content}"
Background="Aqua"
VerticalAlignment="Bottom" HorizontalAlignment="Left">
<TextBlock.LayoutTransform>
<RotateTransform Angle="-30"/>
</TextBlock.LayoutTransform>
<TextBlock.RenderTransform>
<TranslateTransform X="20"/>
</TextBlock.RenderTransform>
</TextBlock>
<!--ContentPresenter Content="{TemplateBinding Content}" Width="200"
VerticalAlignment="Bottom" HorizontalAlignment="Left">
<ContentPresenter.LayoutTransform>
<RotateTransform Angle="-30"/>
</ContentPresenter.LayoutTransform>
<ContentPresenter.RenderTransform>
<TranslateTransform X="18"/>
</ContentPresenter.RenderTransform>
</ContentPresenter-->
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
ContentPresenter
已更改为彩色TextBlock
,目的是查看其边框。
我的问题:默认情况下,列宽等于标题文本宽度,因此单元格位置使用不是最佳的。
当我减少列(HeaderGrid
)宽度(通过绑定/转换或手动)时,标题文本宽度也会减少
如果没有标题文字剪切,有没有办法减少列宽?
答案 0 :(得分:1)
我知道这是很久以前的事了,但是我使用同一个博客来实现我的角度标题,我想我会将我的解决方案发布到裁剪上。 我发现它是ContentPresenter的物理布局框架受到它的父级限制,因此通过在右边距上使用负数,将扩展contentpresenter的布局框架,以便渲染文本。
(注意:在我的解决方案中,我使用了TextBlock,而不是ContentPresenter)
我将Control的右边距绑定到其自身的逆ActualWidth以确保正确的边距:
<TextBlock.Margin>
<Binding ElementName="HeaderContent"
Path="ActualWidth"
Converter="{StaticResource MarginConverter}" />
</TextBlock.Margin>
使用转换器:
<TextBlock.Resources>
<converters:AngledHeadersMarginConverter x:Key="MarginConverter" />
</TextBlock.Resources>
这样做:
class AngledHeadersMarginConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return new Thickness(0, 0, -(double)value, 0);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
这似乎解决了这个问题。