c# - 如何使用 wpf xaml 绘制均匀间隔的对角线文本
问题描述
我正在做一个自定义 WPF UserControl,我需要绘制一个可变大小的文本,该文本旋转 45 度并水平均匀分布,就像下一个图像(是文本的红色条):
使用以下代码:
<UserControl.Resources>
<ResourceDictionary>
<DataTemplate x:Key="CheckTemplate">
<!-- description -->
<TextBlock
VerticalAlignment="Bottom" Margin="-10,0,0,0" Text="{Binding Check.Name}" Background="Transparent" x:Name="AAA">
<TextBlock.LayoutTransform>
<RotateTransform Angle="-45" />
</TextBlock.LayoutTransform>
</TextBlock>
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Margin" Value="0" TargetName="AAA" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
<ItemsPanelTemplate x:Key="ChecksItemsPanel">
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
/>
</ItemsPanelTemplate>
</ResourceDictionary>
</UserControl.Resources>
<StackPanel x:Name="RootPanel" Margin="5">
<ItemsControl
x:Name="WorkflowChecksItemsControl"
ItemTemplate="{DynamicResource CheckTemplate}"
ItemsPanel="{DynamicResource ChecksItemsPanel}"
ItemsSource="{Binding WorkflowChecks}" />
</StackPanel>
我只设法做这样的事情:
我怎样才能使用 XAML 做到这一点?在这个项目中,我也在使用 Telerik UI for WPF,如果它更简单,我可以使用他们的框架。
解决方案
您可以将 ItemsPanel 的 -90° LayoutTransform 与每个 TextBlock 的 45° RenderTransform 结合起来。对于水平距离,只需设置 TextBlocks 的高度。
<ItemsControl ItemsSource="{Binding WorkflowChecks}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel>
<StackPanel.LayoutTransform>
<RotateTransform Angle="-90"/>
</StackPanel.LayoutTransform>
</StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Check.Name}" RenderTransformOrigin="0,1">
<TextBlock.RenderTransform>
<RotateTransform Angle="45"/>
</TextBlock.RenderTransform>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
结果:
推荐阅读
- c# - 如何使用 C# 在 Word 中找到粗体文本的字体名称
- c - 仅使用 50 和 20 的钞票 C 的 ATM 取款
- javascript - 我无法在 Visual Studio Code 中使用 Circumflex 键入 javascript 表达式
- c# - 在没有管理员权限的情况下同步时间 wint NTP 服务器
- python - Pandas GroupBy 和 CumSum 在列上
- c++ - 具有通用和可选类的 C++ 函数
- nginx - 使用 nginx 为静态内容设置过期标头
- python - Pandas:基于多列在时间序列上创建事件计数器
- python - 导入的python文件,里面有相对路径
- php - 来自powershell的肥皂插入请求xml格式