Как я могу связать положение линии с трансформирующим положением эллипса в XAML - PullRequest
1 голос
/ 29 февраля 2012

У меня есть эллипс, который переводится с помощью преобразования, как указано в следующем шаблоне:

<DataTemplate x:Key="VectorTemplate">
    <Ellipse>
        <Ellipse.RenderTransform>
            <TranslateTransform X="{Binding Path=X, Converter={StaticResource SomeValueConverter}}" Y="{Binding Path=Y, Converter={StaticResource SomeValueConverter}}" />
        </Ellipse.RenderTransform>
    </Ellipse>
</DataTemplate>  

В другом месте я определяю ContentControl, который визуализирует:

<HierarchicalDataTemplate x:Key="SkeletonTemplate">
    <Grid>
        <Grid.Resources>
            <Style TargetType="{x:Type ContentControl}">
                <Setter Property="ContentTemplate" Value="{StaticResource VectorTemplate}" />
            </Style> 
        </Grid.Resources>
        <ContentControl Content="{Binding Head}" x:Name="HeadCtrl"/>
        <ContentControl Content="{Binding ShoulderCenter}" x:Name="ShoulderCenterCtrl"/>
        <Line X1="{Binding Path=????, ElementName=HeadCtrl}" Y1="{Binding Path=????, ElementName=HeadCtrl}" X2="{Binding Path=????, ElementName=ShoulderCenterCtrl}" Y2="{Binding Path=????, ElementName=ShoulderCenterCtrl}" />
    </Grid>
</HierarchicalDataTemplate>

Как вы увидите из части с вопросительными знаками, я не уверен, как извлечь позицию X или Y из ContentControl.

Это несколько упрощено по сравнению с тем, что на самом деле содержит код, поэтому у меня есть причина для того, чтобы захотеть привязать к переведенной позиции, а не просто привязать к самому значению X (в итоге я использую ValueConverter на нем). Я мог бы просто добавить один и тот же ValueConverter к каждой координате X и Y и просто указать поле назад в модели представления, но это кажется неуклюжим.

Я должен быть в состоянии привязаться к положению этих движущихся элементов - кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 29 февраля 2012

Если я правильно понял, вы хотите, чтобы ваша линия связывала голову с плечами.

Если это так, я бы напрямую связал позиции линий с моделью, являющейся datacontext для иерархического элемента данных:

<Line X1="{Binding Path=Head.X}" Y1="{Binding Path=Head.Y}" X2="{Binding Path=ShoulderCenter.X}" Y2="{Binding Path=ShoulderCenter.Y}" />

Надеюсь, эта помощь.

Antoine

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...