球洞内的球。 WPF

时间:2014-11-07 09:35:22

标签: c# wpf xaml

当我尝试测试其返回值时,我的代码给了我一个NaN值。代码在这里 C#:

var hx1 = Canvas.GetLeft(top);
var hy1 = Canvas.GetTop(top);
Rect h1 = new Rect(hx1, hy1, top.ActualWidth, top.ActualHeight);
Console.WriteLine(h1);

XAML

<Canvas Canvas.Left="134" Canvas.Top="98" Height="500" Width="1010">
        <Ellipse Height="50" Name="top" Stroke="Black" Width="50" Margin="481,4,479,446" />
        <Ellipse Height="50" Margin="30,21,930,429" Name="topLeft" Stroke="Black" Width="50" />
        <Ellipse Height="50" Margin="30,430,930,20" Name="botLeft" Stroke="Black" Width="50" />
        <Ellipse Height="50" Margin="481,444,479,6" Name="bot" Stroke="Black" Width="50" />
        <Ellipse Height="50" Margin="930,430,30,20" Name="botRight" Stroke="Black" Width="50" />
        <Ellipse Height="50" Margin="930,21,30,429" Name="topRight" Stroke="Black" Width="50" />
    <Grid Canvas.Left="0" Canvas.Top="0" Height="500" Width="1010">
        <!--<Canvas Height="500" Width="1010" Name="PoolCanvas">-->

        <ContentControl x:Name="poolContainer">

        </ContentControl>
        <!--</Canvas>-->
    </Grid>
</Canvas> 

首先,我正在尝试使用WPF制作池游戏。现在我正在尝试制作一个口袋孔#39;让球进入游泳池内。我被告知首先检索孔x和y或孔的坐标,然后检查交叉点,并将球放入口袋内进行编码。但是在我的代码中,它只给我这个输出: 当我试图打印那个矩形时,NaN,NaN,50,50。

还有一件事,如果有其他类型的方法,我可以实现这些目标,如果球进入口袋洞。球会消失。 如果您认为我仍需要提供更多代码。随意评论。我愿意接受建议。如果我有语法错误,请提前感谢,对不起。

1 个答案:

答案 0 :(得分:1)

您可以将EllipsePath一起使用,而不是使用EllipseGeometry来定义每个洞:

    <Canvas>
        <Path Stroke="Black">
            <Path.Data>
                <EllipseGeometry x:Name="topLeft" Center="50,50" RadiusX="25" RadiusY="25"/>
            </Path.Data>
        </Path>
        <Path Stroke="Black">
            <Path.Data>
                <EllipseGeometry x:Name="top" Center="500,50" RadiusX="25" RadiusY="25"/>
            </Path.Data>
        </Path>
        <!-- More Paths, one for each hole -->
    </Canvas>

请注意,现在它是命名的几何,而不是路径本身。所以你的C#代码将是:

        var hx1 = top.Center.X;
        var hy1 = top.Center.Y;
        var h1 = top.Center; // of type System.Windows.Point;

        Rect h1rect = top.Bounds;