1
A
回答
5
假设你有与已知的圆心和半径的椭圆:
Path path = new Path();
EllipseGeometry eg = new EllipseGeometry();
eg.Center = new Point(left + side/2, top + side/2);
eg.RadiusX = side/2;
eg.RadiusY = side/2;
path.Data = eg;
paths.Add(path);
canvas1.Children.Add(paths[paths.Count - 1]);
.
.
path = new Path();
borderColor.Color = Colors.Red;
path.Stroke = borderColor;
path.StrokeThickness = 2;
LineGeometry r = new LineGeometry();
r.StartPoint = eg.Center;
r.EndPoint = new Point(eg.Center.X + eg.RadiusX, eg.Center.Y);
path.Data = r;
paths.Add(path);
canvas1.Children.Add(paths[paths.Count - 1]);
1
有这样做的许多不同的方式。这里有一个,可能会满足您的需求。这只是一个用户控件。圆的半径取决于用户控件的大小,并且会强制控件大小一致。定位用户控件将由您决定。内线的角度是可绑定的。
用户控制的XAML
<UserControl x:Class="TestWPF.CircleTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Foreground="Blue" Background="White"
x:Name="CT" SnapsToDevicePixels="True">
<Grid>
<Ellipse Stroke="{Binding Foreground, ElementName=CT}" Fill="{Binding Background, ElementName=CT}" />
<Line X1="{Binding Center.X, ElementName=CT}" X2="{Binding EndPoint.X, ElementName=CT}" Y1="{Binding Center.Y, ElementName=CT}" Y2="{Binding EndPoint.Y, ElementName=CT}"
Stroke="{Binding Foreground, ElementName=CT}">
<Line.RenderTransform>
<RotateTransform Angle="{Binding Angle, ElementName=CT}" CenterX="{Binding Center.X, ElementName=CT}" CenterY="{Binding Center.Y, ElementName=CT}" />
</Line.RenderTransform>
</Line>
<TextBlock Text="{Binding Angle, ElementName=CT, StringFormat='N2'}" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="3" />
</Grid>
</UserControl>
用户控制背后
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
namespace TestWPF
{
public partial class CircleTest : UserControl, INotifyPropertyChanged
{
public CircleTest()
{
InitializeComponent();
this.SizeChanged += CircleTest_SizeChanged;
}
void CircleTest_SizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
{
double radius;
if (ActualHeight < ActualWidth)
{
Width = ActualHeight;
_center = new Point(Width/2, ActualHeight/2);
radius = ActualHeight/2;
}
else
{
Height = ActualWidth;
_center = new Point(ActualWidth/2, Height/2);
radius = ActualWidth/2;
}
_endPoint = new Point(Center.X, Center.Y - radius);
NotifyOfPropertyChange("Center");
NotifyOfPropertyChange("EndPoint");
}
public double Angle
{
get { return (double)GetValue(AngleProperty); }
set { SetValue(AngleProperty, value); }
}
public static readonly DependencyProperty AngleProperty = DependencyProperty.Register("Angle", typeof(double), typeof(CircleTest), new PropertyMetadata(45.0));
private Point _center;
public Point Center
{
get { return _center; }
}
private Point _endPoint;
public Point EndPoint
{
get { return _endPoint; }
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyOfPropertyChange(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
代码你会使用这样的:
<Window x:Class="TestWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:test="clr-namespace:TestWPF"
Title="MainWindow" Height="350" Width="525">
<Grid>
<test:CircleTest Width="200" Height="200" Foreground="Purple" Angle="{Binding Value, ElementName=SL}" />
<Slider x:Name="SL" Minimum="0" Maximum="360" VerticalAlignment="Bottom" Margin="20" />
</Grid>
</Window>
相关问题
- 1. WPF椭圆路径
- 2. 删除椭圆形边框半径时,2位数字显示
- 3. WPF:创建半椭圆按钮
- 4. 计算椭圆形的半径
- 5. React Native中的椭圆边框半径
- 6. WPF无法在DataGridTemplateColumn中显示椭圆
- 7. 确定椭圆的X半径和Y半径
- 8. 椭圆路径
- 9. 可以圆被转换成椭圆使用半径在画布
- 10. iPhone如何半夹椭圆
- 11. 让半圈多椭圆
- 12. paint()不显示椭圆
- 13. 将地图显示为椭圆
- 14. WPF TextBlock的重叠椭圆
- 15. C#WPF椭圆滑块
- 16. 椭圆图WPF动画
- 17. WPF使用椭圆进步
- 18. WPF绑定改变椭圆
- 19. wpf中的椭圆按钮
- 20. WPF椭圆黑色背景
- 21. K最近的邻居在sklearn半径 - 椭圆
- 22. 特定圆半径
- 23. 半径公差圆
- 24. 结合两个半透明椭圆
- 25. 如何绘制Python中的半椭圆?
- 26. 新行,当我显示10椭圆
- 27. OpenCV - 根本不显示椭圆
- 28. CSS3饼图边框半径显示薄边框的圆
- 29. iOS版SDK:刀尖圆弧半径显示不正确
- 30. 剑道网格图标栏显示椭圆中的椭圆图版本:58.0.3029.96
你有没有试过_anything_这么远吗?先显示你的努力..阅读[常见问题]和[问] – 2013-04-23 15:12:41
你想使用XAML或代码? – David 2013-04-23 15:27:04
是的,我试过了,对不起,我忘了把代码放在这里。 David - 在代码中 – Sangeetha 2013-04-24 10:17:13