我有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}}附加属性下包含这个不那么小的代码段? (修辞问题......显然有一种更聪明的方式......但是怎么样?)
答案 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.