1

私は、次のように使用されている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しかし、同じロジックを適用したいが、値が異なる多くの がありConverterParameterます。このそれほど小さくないスニペットを各RectangleCanvas.Left添付プロパティの下に含める必要がありますか? (修辞的な質問...明らかにもっと賢い方法があります...しかしどうやって?)

4

1 に答える 1

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が、回避することはできます。

于 2014-01-20T12:12:21.213 に答える