【问题标题】:Connecting centre of ellipses with lines用线连接椭圆的中心
【发布时间】:2016-02-03 10:11:58
【问题描述】:

我正在尝试将椭圆的中心与线条连接起来。这就是我所拥有的——

这是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>

现在我想使用C# 将每个椭圆中心的linecheckbox 连接到所有椭圆。基本上我会有一个按钮,点击它后,我希望所有的行都出现。我是应用程序开发的新手,不知道如何去做。

编辑- 基本上我想将每个节点的中心连接到所有其他节点。这类似于下图,我为第一个节点手动完成了它-

【问题讨论】:

  • 我不明白你想要实现什么。椭圆各有 2 个焦点,而不仅仅是一个中心。你能模拟一幅画,展示你期望它的外观吗?另外,你自己做了什么来解决这个问题?什么是你不完全理解的?
  • 请查看编辑。使用 XAML 我可以手动连接中心,但我不知道如何使用 C#
  • @KarmaEDV 椭圆有 2 个焦点(如果是圆形,则有 1 个),但它们只有 1 个中心(即 2 个焦点之间的中点)。

标签: c# visual-studio xaml windows-phone-8 windows-phone-8.1


【解决方案1】:

假设省略号的数量保持不变,并且您知道哪个在哪个位置。此外,这是一个快速而肮脏的解释。

首先给每个省略号命名

<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);

这不是全部,你最终会重复很多次,但我认为这对你来说是一个很好的练习,可以让你弄清楚如何让它真正起作用并且更优雅。

【讨论】:

  • 谢谢,但它给了我以下错误-Error 1 'Windows.UI.Xaml.Shapes.Ellipse' does not contain a definition for 'TransformToAncestor' and no extension method 'TransformToAncestor' accepting a first argument of type 'Windows.UI.Xaml.Shapes.Ellipse' could be found (are you missing a using directive or an assembly reference?) Error 4 The name 'CenterPointETopLeft' does not exist in the current context
猜你喜欢
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多