gpt4 book ai didi

wpf - 如何绑定(bind)到 WPF 中两个数据绑定(bind)值的总和?

转载 作者:行者123 更新时间:2023-12-04 06:38:15 24 4
gpt4 key购买 nike

我设计了一个模拟时钟控制。它使用两个椭圆的笔划来表示钟面的外边界和内边界。

Clock control

我在 UserControl 中公开了允许用户更改这两个边框的粗细的属性。 Ellipse.StrokeThickness 属性然后绑定(bind)到这些 UserControl 属性。目前,我将外部边框厚度的 UserControl 属性绑定(bind)到内部元素的边距,以便在增加边框大小时不会隐藏它们。

<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}" />
...

问题是,如果增加内部边框的厚度,这不会影响边距,因此小时刻度和数字可能会被部分遮挡或隐藏。所以我真正需要的是能够将内部控件的边距属性绑定(bind)到内部和外部边框厚度值的总和(它们是 double 类型)。

我已经使用'DataContext = this;'成功地完成了这项工作,但我试图在没有这个的情况下重写控件,因为我听说不推荐这样做。我还考虑过使用转换器并将第二个值作为 ConverterParameter 传递,但不知道如何绑定(bind)到 ConverterParameter。任何提示将非常感谢。

编辑>>

感谢 Kent 的建议,我创建了一个简单的 MultiConverter 来添加输入值并返回结果。我已经将带有转换器 XAML 的 SAME 多重绑定(bind)连接到 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。有任何想法吗?

编辑 >>>>

有趣的是,Margin 属性可以绑定(bind)到 double 类型的数据属性,但这似乎不适用于 MultiBinding。按照 Kent 的建议,我更改了 Converter 以将值作为厚度对象返回,现在它可以工作了。谢谢肯特。

最佳答案

听起来您正在寻找 MultiBinding带有能够评估表达式的转换器。我的 ExpressionConverter 正是允许这一点。当然,如果您不想仅仅为此而依赖第三方库,您可以编写自己的多值转换器,将两个值加在一起。

关于wpf - 如何绑定(bind)到 WPF 中两个数据绑定(bind)值的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4606438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com