下面的代码有什么问题? [英] What is wrong with the following code?
问题描述
< Canvas x:Name =mainCnavs>
< / Canvas>
public部分类MainWindow:窗口
{
CombinedGeometry g;
路径p;
public MainWindow()
{
InitializeComponent();
mainWindow.Loaded + = new RoutedEventHandler(mainWindow_Loaded);
$ b void mainWindow_Loaded(object sender,RoutedEventArgs e)
{
g = new CombinedGeometry(ellipse.RenderedGeometry,ellipse1.RenderedGeometry);
g.GeometryCombineMode = GeometryCombineMode.Intersect;
statusBar.Text =top left+ g.Bounds.TopLeft.ToString()+bounds.size+ g.Bounds.Size +bounds+ g.Bounds.ToString();
p = new Path();
p.Data = g;
p.Fill = Brushes.Green;
mainCnavs.Children.Add(p);
}
}
如果我将椭圆更改为矩形,并且联合使两个形状重叠。它的行为就好像两个几何图形没有定位一样,是因为我正在使用渲染的几何图形,并且它没有与之相关的位置?那么获得形状几何的另一种方法是什么?
是的问题是使用RenderedGeometry,因为它不包含相对于Canvas的位置。
尝试使用您自己的EllipseGeometry构建的EllipseGeometry。
Rect r1 = new Rect(Canvas.GetLeft(ellipse),Canvas.GetTop(ellipse),ellipse.Width,ellipse.Height);
Rect r2 = new Rect(Canvas.GetLeft(ellipse1),Canvas.GetTop(ellipse1),ellipse1.Width,ellipse1.Height);
EllipseGeometry eg1 =新的EllipseGeometry(r1);
EllipseGeometry eg2 =新的EllipseGeometry(r2);
组合几何g =新的组合几何(eg1,eg2);
g.GeometryCombineMode = GeometryCombineMode.Intersect;
//statusBar.Text =top left+ g.Bounds.TopLeft.ToString()+bounds.size+ g.Bounds.Size +bounds+ g.Bounds.ToString();
Path p = new Path();
p.Data = g;
p.Fill = Brushes.Green;
mainCnavs.Children.Add(p);
I get a full ellipse not the intersection between the two. What is wrong?
<Canvas x:Name="mainCnavs">
<Ellipse x:Name="ellipse" Width="100" Height="50" Canvas.Top="100" Canvas.Left="300" Fill="Transparent" Stroke="Red" StrokeThickness="3"/>
<Ellipse x:Name="ellipse1" Width="100" Height="50" Canvas.Top="100" Canvas.Left="250" Fill="Transparent" Stroke="Red" StrokeThickness="3"/>
</Canvas>
public partial class MainWindow : Window
{
CombinedGeometry g;
Path p;
public MainWindow()
{
InitializeComponent();
mainWindow.Loaded += new RoutedEventHandler(mainWindow_Loaded);
}
void mainWindow_Loaded(object sender, RoutedEventArgs e)
{
g = new CombinedGeometry(ellipse.RenderedGeometry, ellipse1.RenderedGeometry);
g.GeometryCombineMode = GeometryCombineMode.Intersect;
statusBar.Text = "top left " + g.Bounds.TopLeft.ToString() +" bounds.size " + g.Bounds.Size + " bounds " + g.Bounds.ToString();
p = new Path();
p.Data = g;
p.Fill = Brushes.Green;
mainCnavs.Children.Add(p);
}
}
If I change the ellipse to a rectangle, and do a union is giving the two shapes overlapped. It behaves as if the two geometries have no positioning, is this because I am using the rendered geometry and it has no position associated with it? Then what is another way then to get the geometry of the shape?
Yes the problem is with using the RenderedGeometry, as it does not contain the position relative to the Canvas.
Try making use of your own EllipseGeometry built from the positions of the Ellipses.
Rect r1 = new Rect(Canvas.GetLeft(ellipse), Canvas.GetTop(ellipse), ellipse.Width, ellipse.Height);
Rect r2 = new Rect(Canvas.GetLeft(ellipse1), Canvas.GetTop(ellipse1), ellipse1.Width, ellipse1.Height);
EllipseGeometry eg1 = new EllipseGeometry(r1);
EllipseGeometry eg2 = new EllipseGeometry(r2);
CombinedGeometry g = new CombinedGeometry(eg1, eg2);
g.GeometryCombineMode = GeometryCombineMode.Intersect;
//statusBar.Text = "top left " + g.Bounds.TopLeft.ToString() + " bounds.size " + g.Bounds.Size + " bounds " + g.Bounds.ToString();
Path p = new Path();
p.Data = g;
p.Fill = Brushes.Green;
mainCnavs.Children.Add(p);
这篇关于下面的代码有什么问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!