2 свойства в одном переплете? - PullRequest
2 голосов
/ 20 сентября 2010

Могу ли я объединить 2 элемента в одном соединении?

<Canvas>
    <Ellipse Fill="Black" x:Name="dot1" Width="16" Height="16" Canvas.Left="124" Canvas.Top="133"/>
    <Ellipse Fill="Black" x:Name="dot2" Width="16" Height="16" Canvas.Left="221" Canvas.Top="40"/>
    <Line Stroke="Black" x:Name="line1" 
          X1="{Binding ElementName=dot1, Path=(Canvas.Left)}" 
          Y1="{Binding ElementName=dot1, Path=(Canvas.Top)}"

          X2="{Binding ElementName=dot2, Path=(Canvas.Left)}" 
          Y2="{Binding ElementName=dot2, Path=(Canvas.Top)}"
          />
</Canvas>

Мне нужно не только привязать начальную и конечную точки линии к точкам Левый и Правый , но сложение (Left + Width / 2) и (Top + Height / 2) (центры).

Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2010

Да, используйте MultiBinding и используйте формулу в IMultiValueConverter.

Редактировать:

Примерно так, когда только X1 использует MultiBinding, а остальные неизменны.

<Canvas>
    <Ellipse Fill="Black" x:Name="dot1" Width="16" Height="16" Canvas.Left="124" Canvas.Top="133"/>
    <Ellipse Fill="Black" x:Name="dot2" Width="16" Height="16" Canvas.Left="221" Canvas.Top="40"/>
    <Line Stroke="Black" x:Name="line1" 
    Y1="{Binding ElementName=dot1, Path=(Canvas.Top)}"

    X2="{Binding ElementName=dot2, Path=(Canvas.Left)}" 
    Y2="{Binding ElementName=dot2, Path=(Canvas.Top)}">
        <Line.X1>
            <MultiBinding Converter="{StaticResource myMultiValueConverter}">
                <Binding Path="(Canvas.Top)"/>
                <Binding Path="(Canvas.Left)"/>
            </MultiBinding>
        </Line.X1>
    </Line>
</Canvas>
2 голосов
/ 20 сентября 2010

Вы можете привязать к нескольким свойствам, используя MultiBinding .

Есть несколько примеров и руководств по этому вопросу, например, это и это , кажется, говорит вам, что вам нужно знать.

...