Border有Margin属性,会让每个文字下的下划线不连贯
时间: 2024-03-03 21:53:55 浏览: 14
你可以在DataTemplate中的Border控件中,使用TextBlock控件的Padding属性来添加下划线所需的空间,避免Margin属性导致下划线不连贯的问题,具体步骤如下:
1.在DataTemplate中的Border控件中添加一个TextBlock控件,并为TextBlock控件设置Padding属性,例如:
```xml
<DataTemplate>
<Border>
<TextBlock Text="{Binding}" TextDecorations="Underline" Padding="0,0,0,3" />
</Border>
</DataTemplate>
```
2.在TextBlock控件中设置Padding属性,使下划线有足够的空间,例如上述代码中的Padding属性为"0,0,0,3",表示在文本底部添加3个像素的空白区域。
上述代码将会为ItemsControl中的每个Item添加一个带有连续下划线的文本,避免Margin属性导致下划线不连贯的问题。你可以根据需要修改Padding属性的值来调整下划线的位置和样式。
相关问题
添加一个连续不断的下划线,注意Border有margin属性
如果您想在每个字符串的下方添加一个连续不断的下划线,可以在 Border 控件中添加一个 TextBlock 控件,并设置其 Text 属性为一条连续不断的下划线,然后将 Margin 属性应用到 TextBlock 控件上。以下是修改后的代码示例:
```
<ItemsControl x:Class="HDSProject.Control.CustomFont" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:HDSProject.Control" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" x:Name="itemCtrl" ItemsSource="{Binding Path=Title2, RelativeSource={RelativeSource Mode=Self}}" FontSize="20" Foreground="Teal" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Border Margin="{Binding Path=CharacterSpacing, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:CustomFont}}">
<ContentPresenter Content="{Binding}"/>
</Border>
<TextBlock Text="_____________________________________" Margin="0,2,0,0"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
```
在修改后的代码中,我们将 Border 控件和连续不断的下划线用一个 StackPanel 包裹起来,这样它们就可以一起作为一个元素展示。TextBlock 控件的 Margin 属性被设置为 "0,2,0,0",即在顶部留出 2 个像素的空白,以使下划线与上面的字符串有一定的间隔。
我并不想去掉Border和Border的Margin属性,该怎么修改
如果你不想去掉 `Border` 控件和 `Margin` 属性,可以在 `Border` 控件的内部再添加一个 `Grid` 控件,并在 `Grid` 控件中绘制 `TextBlock` 和 `Line` 控件。以下是修改后的代码示例:
```xaml
<ItemsControl x:Class="HDSProject.Control.CustomFont"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:HDSProject.Control"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
x:Name="itemCtrl"
ItemsSource="{Binding Path=Title2, RelativeSource={RelativeSource Mode=Self}}"
FontSize="20" Foreground="Teal">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Margin="{Binding Path=CharacterSpacing, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:CustomFont}}">
<Grid>
<TextBlock Text="{Binding}" Margin="0"/>
<Line X1="0" Y1="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TextBlock}}" X2="{Binding ActualWidth, ElementName=tb}" Y2="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TextBlock}}" Stroke="Teal" StrokeThickness="1"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
```
这段 XAML 代码同样会在每个 `TextBlock` 下面添加一条宽度与 `TextBlock` 相同的下划线,下划线颜色为 Teal,线条粗细为 1。`Line` 控件的位置使用了 `ActualHeight` 和 `ActualWidth` 属性来实现自适应,无需设置 `Margin` 属性。