我正在构建我的用户控件。
我有一些"常数"关于对象的大小,在我的模板对象中我有类似
的东西<UserControl ...>
<UserControl.Resources>
<sys:Double x:Key="width">10</sys:Double>
<sys:Double x:Key="margin">30</sys:Double>
</UserControl.Resources>
...
<ControlTemplate ...>
<Grid x:Name="width_plus_margin">
...
如果我想要&#34; witdh_plus_margin&#34;的宽度是&#34;宽度&#34;价值我刚刚添加了类似
的内容Width="{StaticResource width}"
但我真正需要的是设置类似
的东西Width="{StaticResource width} + {StaticResource margin}"
这种语法错了。有没有办法指定我需要的东西?
答案 0 :(得分:1)
您无法绑定到Binding中的多个源属性。因此,您需要某种聚合器,它提供可以绑定的输出属性。
以下是相同模式的一些变体:
<UserControl.Resources>
<sys:Double x:Key="width">10</sys:Double>
<sys:Double x:Key="margin">30</sys:Double>
<BindableResult x:Key="widthPlusMargin" ArithmeticOperation="Add" LeftOperand="{StaticResource width}" RightOperand="{StaticResource margin}"/>
</UserControl.Resources>
<Grid Width="{StaticResource widthPlusMargin}">
BindableResult有一个隐式强制转换操作符加倍:
public static implicit operator double(BindableResult source)
{
return source.InternalResult;
}
或类似的东西:
<UserControl.Resources>
<sys:Double x:Key="width">10</sys:Double>
<sys:Double x:Key="margin">30</sys:Double>
</UserControl.Resources>
<Grid>
<i:Interaction.Behaviors>
<SetCombinedWidth Value1="{StaticResource width}" Value2="{StaticResource margin}"/>
</i:Interaction.Behaviors>
</Grid>
您还可以谷歌查看 silverlight多重绑定实施,看看是否更符合您的口味。但最终它只是聚合器的另一种变体。