2010-08-02 6 views
1

Nous avons quelques XAML:SL 4: Comportement étrange avec un contrôle basé sur un modèle

<Style TargetType="local:V_RelLine"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="local:V_RelLine"> 
       <Grid x:Name="LayoutRoot"> 
        <VisualStateManager.VisualStateGroups> 
        </VisualStateManager.VisualStateGroups> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"></RowDefinition> 
        </Grid.RowDefinitions> 
        <Ellipse x:Name="startArrow" Height="20" Width="60" Fill="Green" Stroke="Blue" Visibility="Visible" /> 
        <Path x:Name="LinePathPart"        Visibility="Visible" Stroke="Red" StrokeDashArray="2 2" StrokeThickness="2" 
          > 
         <Path.Data> 
          <PathGeometry x:Name="LinePathGeometry" > 
           <PathFigure x:Name="linePathBezierFigure" > 
            <BezierSegment x:Name="linePathBezierSegment" /> 
           </PathFigure> 
          </PathGeometry> 
         </Path.Data> 
        </Path> 
        <Ellipse x:Name="endArrow" Height="20" Width="20" Fill="Red" Stroke="Red" Visibility="Visible" /> 

       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Et dans le code derrière:

LinePathBezierFigure.StartPoint = startPoint; 
Canvas.SetLeft(startArrow, startPoint.X); 
Canvas.SetTop(startArrow, startPoint.Y); 
/* similar for endArrow */ 

Lors de l'exécution, startArrow et endArrow finissent au même point (même bien qu'ils aient été placés à différents endroits), comme s'ils se sont retrouvés à 0,0.
En fait, un appel ultérieur à Canvas.GetLeft (startArrow) montre qu'il est à 0,0.
Que se passe-t-il? Pourquoi des objets différents dans le même modèle, assignés les mêmes coordonnées, se retrouvent-ils dans des endroits différents?

Merci pour toute idée de cette ....

Répondre

0

Juste une pensée, mais Canvas.Left et Canvas.Top normalement ne fonctionnent bien que lorsque les éléments sont placés dans un Canvas plutôt que d'un Grid comme vous utilisez actuellement.

+0

Je commence à soupçonner que c'est le problème ... Pourquoi le chemin apparaît comme prévu, alors que les ellipses ne le font pas? – Number8

+0

Le 'StartPoint' de la figure dans un' Path' est relatif à l'élément Path contenant ainsi il apparaît comme prévu. Je ne suis pas sûr de savoir comment je peux simplifier la réponse, pour que les propriétés 'Canvas.Top' et' Canvas.Left' fonctionnent sur les ellipses, les ellipses doivent être des enfants d'un élément 'Canvas' et non d'un élément' Grid'. – AnthonyWJones

Questions connexes