如何多次使用MultiBinding,缩写形式,每个都有不同的ConverterParameter?

时间:2014-01-20 11:37:32

标签: c# wpf xaml multibinding xaml-binding

我有IMultiValueConverter名为Placer,使用方式如下:

<Rectangle Name="HostBox" Fill="#FFF4F4F5" Height="36" Stroke="Black" Canvas.Top="32" 
            Width="86" RadiusY="9.5" RadiusX="9.5">
    <Canvas.Left>
        <MultiBinding Converter="{StaticResource Placer}" ConverterParameter="0.5">
            <Binding Path="ActualWidth" RelativeSource="{RelativeSource AncestorType={x:Type Canvas}}"/>
            <Binding Path="Width" RelativeSource="{RelativeSource Self}"/>
        </MultiBinding>
    </Canvas.Left>
</Rectangle>

但我有很多Rectangle s,我想在其上应用相同的逻辑,但具有不同的ConverterParameter值。我是否必须在每个Rectangle的{​​{1}}附加属性下包含这个不那么小的代码段? (修辞问题......显然有一种更聪明的方式......但是怎么样?)

1 个答案:

答案 0 :(得分:1)

尝试使用样式。例如,下面的一个应用于所有矩形实例,但您也可以给它一个键并将其单独应用于矩形:

    <Style TargetType="Rectangle">
        <Setter Property="Canvas.Left">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource Placer}" ConverterParameter="0.5">
                    <Binding Path="ActualWidth" RelativeSource="{RelativeSource AncestorType={x:Type Canvas}}"/>
                    <Binding Path="Width" RelativeSource="{RelativeSource Self}"/>
                </MultiBinding>
            </Setter.Value>
        </Setter>
    </Style>

为了参数化MultiBinding.ConverterParameter,您可以简单地使用绑定。

编辑:我已经纠正了与MultiBinding.ConverterParameter的约束:这是不可能的,因为它不是DependencyProperty而是you can work around it.