2016-02-03 7 views
1

Я пытаюсь соединить центр эллипсов с линиями. Это то, что я have- enter image description hereСоединительный центр эллипсов с линиями

Вот XAML код-

<Grid x:Name="Main" Background="#FFF9F9F9"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="8*"/> 
     <RowDefinition Height="1*"/> 
    </Grid.RowDefinitions> 



    <Grid x:Name="Start" Grid.Row="0" Background="#FF0D3A7C">   
    </Grid> 
    <Grid x:Name="End" Grid.Row="2" Background="#FF0D3A7C">    
    </Grid> 

    <Grid x:Name="Game" Grid.Row="1" Background="#FF0D3A7C"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 

     <Ellipse Fill="#FFF4F4F5" Grid.Row="0" Grid.Column="0" Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/> 
     <Ellipse Fill="#FFF4F4F5" Grid.Row="0" Grid.Column="1" Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/> 
     <Ellipse Fill="#FFF4F4F5" Grid.Row="0" Grid.Column="2" Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/> 
     <Ellipse Fill="#FFF4F4F5" Grid.Row="1" Grid.Column="0" Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/> 
     <Ellipse Fill="#FFF4F4F5" Grid.Row="1" Grid.Column="1" Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/> 
     <Ellipse Fill="#FFF4F4F5" Grid.Row="1" Grid.Column="2" Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/> 
     <Ellipse Fill="#FFF4F4F5" Grid.Row="2" Grid.Column="0" Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/> 
     <Ellipse Fill="#FFF4F4F5" Grid.Row="2" Grid.Column="1" Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/> 
     <Ellipse Fill="#FFF4F4F5" Grid.Row="2" Grid.Column="2" Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/>  
    </Grid> 

</Grid> 

Теперь я хочу подключить line или checkbox от центра каждого эллипса всех эллипсов с помощью C#. В основном у меня будет кнопка, и, щелкнув по ней, я хочу, чтобы все строки появлялись. Я новичок в разработке приложений и не знаю, как это сделать.

Редактировать- В принципе, я хочу соединить центры каждого узла со всем остальным. Это похоже на следующий рисунок, где я сделал это для первого узла с ручным

enter image description here

+0

Я не совсем понял, чего вы хотите достичь. У эллипсов есть два координационных центра, а не только один центр. Можете ли вы макет чертежа, где вы показываете, как вы ожидаете, что он будет выглядеть? Кроме того, что вы сделали, чтобы решить проблему самостоятельно? Что вы точно не понимаете? – KarmaEDV

+0

См. Редактирование. Используя 'XAML', я могу вручную подключить центры, но я не знаю, как это сделать, используя C# – Noober

+0

. У эллипсов @KarmaEDV есть 2 фокальных точки (или 1, если их круг), но они имеют только 1 центр (который является серединой между 2 точки фокуса). –

ответ

1

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

Начало, давая каждому Ellipsis имя

<Ellipse Name="ETopLeft" Fill="#FFF4F4F5" Grid.Row="0" Grid.Column="0" 
Margin="20,20,20,20" Stroke="Black" RenderTransformOrigin="0.474,5.849"/> 

В Кодексе За получить текущий X/Y позиции всех многоточие во время выполнения с этим и добавить половину длины/высоты, чтобы все центры

Point posETopLeft = ETopLeft.TransformToAncestor(MainWindow) 
          .Transform(new Point(0, 0)); 
posETopLeft.X += (ETopLeft.Width/2) 
posETopLeft.Y += (ETopLeft.Height/2) 

Теперь добавьте линии динамически в форму, промойте и повторите в соответствии с вашей логикой/требованиями.

var myLine = new Line(); 
myLine.Stroke = System.Windows.Media.Brushes.Black; 

myLine.X1 = CenterPointETopLeft.X; 
myLine.X2 = CenterPointETopMiddle.X; 
myLine.Y1 = CenterPointETopLeft.Y; 
myLine.Y2 = CenterPointETopMiddle.Y; 

Canvas.Children.Add(myLine); 

Это не все, и вы будете в конечном итоге с большим количеством повторений, но я думаю, что это будет хорошее упражнение для вас, чтобы выяснить, как сделать это на самом деле работает и изящнее.

+0

Спасибо, но он дает мне следующую ошибку: 'Ошибка « Windows.UI.Xaml.Shapes.Ellipse »не содержит определения для« TransformToAncestor »и никакого метода расширения« TransformToAncestor », принимающего первый аргумент типа« Windows » .UI.Xaml.Shapes.Ellipse»может быть найден (вы пропали без вести с помощью директивы или ссылка на сборку?) \t' ' Ошибка \t \t 4 название„CenterPointETopLeft“не существует в текущем контексте \t' – Noober

Смежные вопросы