如何TemplateBind到BorderThickness.Top(或底部或左或右)?
-
21-09-2019 - |
题
不知是否有可能像BorderThickness.Top的结构元件,以TemplatedParent的相应属性绑定。我试图
<Border Margin="0" Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}">
<Border.BorderThickness>
<Thickness Left="0" Right="0" Top="{TemplateBinding BorderThickness.Top}" Bottom="{TemplateBinding BorderThickness.Bottom}"/>
</Border.BorderThickness>
</Border>
我想这样做的原因是我想左和右是0,只有顶部和底部的约束。
预先感谢。
解决方案
这是不可能的,因为厚度是数值类型 - 只能创建的依赖对象的依赖属性绑定。
你可以做什么是绑定了borderThickness正常:
<Border Margin="0"
Padding="{TemplateBinding Padding}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness, Converter={StaticResource ThicknessConverter}}" />
然后使用转换器返回一个适当修改厚度:
object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
{
var thickness = (Thickness) value;
return new Thickness( 0.0, thickness.Top, 0.0, thickness.Bottom );
}
您可以甚至使用ConverterParameter来指定其厚度的部分来清除。
其他提示
与转换器的解决方案是正确的。
在其中有兴趣仅在一个值的情况下,可以直接在 XAML 强>做到这一点没有一个的转换器即可。 {TemplateBinding …}
是仅适用于具有一个有限的功能{Binding RelativeSource={RelativeSource TemplatedParent} …}
一个语法糖。
例如,一些自定义边框:
<Button BorderBrush="Purple"
BorderThickness="1 2 3 4"
Content="This is a button!">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<DockPanel>
<Rectangle DockPanel.Dock="Left"
Width="{Binding BorderThickness.Left, RelativeSource={RelativeSource TemplatedParent}}"
Fill="{Binding BorderBrush, RelativeSource={RelativeSource TemplatedParent}}" />
<Rectangle DockPanel.Dock="Top"
Height="{Binding BorderThickness.Top, RelativeSource={RelativeSource TemplatedParent}}"
Fill="{Binding BorderBrush, RelativeSource={RelativeSource TemplatedParent}}" />
<Rectangle DockPanel.Dock="Right"
Width="{Binding BorderThickness.Right, RelativeSource={RelativeSource TemplatedParent}}"
Fill="{Binding BorderBrush, RelativeSource={RelativeSource TemplatedParent}}" />
<Rectangle DockPanel.Dock="Bottom"
Height="{Binding BorderThickness.Bottom, RelativeSource={RelativeSource TemplatedParent}}"
Fill="{Binding BorderBrush, RelativeSource={RelativeSource TemplatedParent}}" />
<ContentPresenter />
</DockPanel>
</ControlTemplate>
</Button.Template>
</Button>
不隶属于 StackOverflow