silverlight在绑定中的表达

时间:2016-06-01 07:37:52

标签: xaml silverlight binding

我正在构建我的用户控件。

我有一些"常数"关于对象的大小,在我的模板对象中我有类似

的东西
<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}"

这种语法错了。有没有办法指定我需要的东西?

1 个答案:

答案 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多重绑定实施,看看是否更符合您的口味。但最终它只是聚合器的另一种变体。