2017-07-05 4 views
-1

lors de la définition des coordonnées pour les formes de toile dans les fichiers XAML, est-il possible de faire quelque chose comme ceci:coordonnées dans WPF Canvas

<Canvas x:Name="myCanvas" 
     DockPanel.Dock="Bottom" 
     VerticalAlignment="Stretch"> 

    <Canvas.Background> 
     <SolidColorBrush Color="White" Opacity="100" /> 
    </Canvas.Background> 

    <Ellipse x:Name="ell1" 
       Width="30" 
       Height="30" 
       Stroke="Black" 
       StrokeThickness="1" 
       Fill="Red" 
       Canvas.Left="100" 
       Canvas.Top="50" /> 

    <Ellipse x:Name="ell2" 
       Width="30" 
       Height="30" 
       Stroke="Black" 
       StrokeThickness="1" 
       Fill="Red" 
       Canvas.Right="100" 
       Canvas.Top="50" /> 

    <Line Stroke="Black" 
      StrokeThickness="1" 
      X1="ell1.Canvas.Right"        *** look here *** 
      Y1="ell1.Canvas.Top + ell1.Height/2"    *** look here *** 
      X2="ell2.Canvas.Left"        *** look here *** 
      Y2="ell2.Canvas.Top + ell2.Height/2" />    *** look here *** 

</Canvas> 

Ou la seule façon de le faire est par C#?

Merci, Massimo

+0

Oui, mais en C#. Pas moyen de le faire en XAML? – user1738687

+0

Vous pouvez probablement lier les propriétés avec MultiBindings et les convertisseurs de liaison appropriés, mais sachez que 'Canvas.Right' n'est pas défini sur' ell1', et 'Canvas.Left' pas sur' ell2', ​​donc leurs valeurs sont 'NaN' . Vous devez utiliser les propriétés que vous avez définies et ajouter/soustraire la largeur de l'ellipse selon vos besoins. – Clemens

+1

Comme note, Opacity est une valeur double entre 0 et 1, vous devriez donc définir 'Opacity =" 1 "'. Cependant, c'est la valeur par défaut de toute façon, vous n'avez donc pas besoin de définir l'opacité de votre SolidColorBrush. Encore plus simple, définissez '' – Clemens

Répondre

0

Vous pouvez en effet lier à une propriété attachée comme ceci:

<Line ... X2="{Binding Path=(Canvas.Left), ElementName=ell1}" /> 

Mais il n'y a pas d'opérateurs + ou / définis dans XAML de sorte que vous devra écrire du code pour être en mesure de définir la propriété Y1 à 50 + 30/2.

Après tout XAML est un balisage langue et C# est un langage de programmation.

+0

@ user1738687: N'oubliez pas de voter pour les réponses utiles :) https://stackoverflow.com/help/privileges/vote-up – mm8

0

Cela devrait générer le résultat souhaité sans trop de tracas. Vous devrez peut-être ajuster la marge de la grille.

<Grid DockPanel.Dock="Bottom" Margin="100,50"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 

    <Ellipse Grid.Column="0" Width="30" Height="30" 
      Stroke="Black" StrokeThickness="1" Fill="Red"/> 

    <Ellipse Grid.Column="2" Width="30" Height="30" 
      Stroke="Black" StrokeThickness="1" Fill="Red"/> 

    <Rectangle Grid.Column="1" Fill="Black" Height="1"/> 
</Grid> 

Cela est encore plus simple:

<DockPanel DockPanel.Dock="Bottom" Margin="100,50"> 

    <Ellipse DockPanel.Dock="Left" Width="30" Height="30" 
      Stroke="Black" StrokeThickness="1" Fill="Red"/> 

    <Ellipse DockPanel.Dock="Right" Grid.Column="2" Width="30" Height="30" 
      Stroke="Black" StrokeThickness="1" Fill="Red"/> 

    <Rectangle Fill="Black" Height="1"/> 
</DockPanel>