我设计了一个模拟时钟控制。它使用来自两个椭圆的笔划来表示外部边界和钟面的内部边界。如何绑定WPF中两个数据绑定值的总和?
我已经暴露在该用户控件允许用户改变这两个边界的厚度特性。 Ellipse.StrokeThickness属性然后绑定到这些UserControl属性。此刻,我将外边框厚度的UserControl属性绑定到内部元素的边距,以便在边框尺寸增大时不会隐藏它们。
<Ellipse Name="OuterBorder" Panel.ZIndex="1" StrokeThickness="{Binding OuterBorderThickness,
ElementName=This}" Stroke="{StaticResource OuterBorderBrush}" />
<Ellipse Name="InnerBorder" Panel.ZIndex="5" StrokeThickness="{Binding InnerBorderThickness,
ElementName=This}" Margin="{Binding OuterBorderThickness, ElementName=This}"
Stroke="{StaticResource InnerBorderBrush}">
...
<Ellipse Name="Face" Panel.ZIndex="1" Margin="{Binding OuterBorderThickness, ElementName=This}"
Fill="{StaticResource FaceBackgroundBrush}" />
...
的问题是,如果内边界厚度增加时,这并不影响边距等小时蜱和数字可以成为部分模糊或隐藏。所以我真正需要的是能够将内部控件的边距属性绑定到内部和外部边框厚度值的总和(它们是double类型的)。
我已经使用'DataContext = this;'成功完成了这项工作,但是我试图在没有这个的情况下重写控件,因为我听到它不被推荐。我也考虑过使用转换器并将第二个值作为ConverterParameter传递,但不知道如何绑定到ConverterParameter。任何提示将非常感谢。
编辑>>
由于肯特的建议下,我创建了一个简单的多转换器添加的输入值,并返回结果。我将带有转换器XAML的SAME多重绑定连接到TextBlock.Text属性和TextBlock.Margin属性以测试它。
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource SumConverter}" ConverterParameter="Add">
<Binding Path="OuterBorderThickness" ElementName="This" />
<Binding Path="InnerBorderThickness" ElementName="This" />
</MultiBinding>
</TextBlock.Text>
<TextBlock.Margin>
<MultiBinding Converter="{StaticResource SumConverter}" ConverterParameter="Add">
<Binding Path="OuterBorderThickness" ElementName="This" />
<Binding Path="InnerBorderThickness" ElementName="This" />
</MultiBinding>
</TextBlock.Margin>
</TextBlock>
我可以看到在TexBlock中显示的正确值,但未设置边距。有任何想法吗?
编辑>>
有趣的是,Margin属性可以绑定到一个double类型的数据属性,但是这似乎并没有一个MultiBinding内适用。正如Kent所建议的那样,我将Converter更改为厚度对象返回值,现在它可以工作。谢谢肯特。
我创建了一个简单的MultiConverter来添加输入值并返回结果。我已经将带有转换器XAML的SAME多重绑定连接到TextBlock.Text属性和Grid.Margin属性。我可以在TexBlock中看到正确的值,但未设定保证金。有任何想法吗? – Sheridan 2011-01-05 19:00:23
“边距”属于厚度类型,因此您的转换器将不得不返回该实例。您可以在Visual Studio中检查输出窗口,并且您应该看到一条消息。 – 2011-01-05 20:00:04
啊,这很奇怪......但是正确。有趣的是,Margin属性可以绑定到double类型的数据属性,但这似乎并不适用于MultiBinding。 – Sheridan 2011-01-05 20:45:04