看起来ControlTemplate中的以下Ellipse没有获得BorderThickness,但为什么?
<Window.Resources>
<ControlTemplate x:Key="EllipseControlTemplate" TargetType="{x:Type TextBox}">
<Grid>
<Ellipse
Width="{TemplateBinding ActualWidth}"
Height="{TemplateBinding ActualHeight}"
Stroke="{TemplateBinding Foreground}"
StrokeThickness="{TemplateBinding BorderThickness}" />
<ScrollViewer Margin="0" x:Name="PART_ContentHost" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Window.Resources>
<Grid>
<TextBox
Template="{DynamicResource EllipseControlTemplate}"
Foreground="Green"
BorderThickness="15" />
</Grid>
到Foreground
的TemplateBinding工作得很好,椭圆是绿色的。但是StrokeThickness
它似乎不起作用,为什么?
答案 0 :(得分:14)
另一种可能的解决方案......(因为我只想使用IValueConverters作为最后的手段,如果你需要将其设置为其他东西,更改Ellipse的DataContext可能不起作用):
<Ellipse StrokeThickness="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderThickness.Top}" />
这相当于原始意图(绑定到TemplatedParent),但使用长手标记可以指定路径而不仅仅是属性
答案 1 :(得分:5)
BorderThickness
并不容易,它是Thickness
类型的结构(可以是复合的,如BorderThickness=".0,.0,2,2"
),而StrokeThickness
属性的类型为{{ 1}}。
您需要double
才能使此绑定工作。
答案 2 :(得分:1)
有命名问题:BorderThickness
类型为Thickness
,StrokeThickness
类型为double
。所以我们需要IValueConverter
。
答案 3 :(得分:1)
您还可以使用Ellipse的DataContext属性:
<Ellipse DataContext="{TemplateBinding BorderThickness}" StrokeThickness="{Binding Top}" />
希望这有帮助!