我希望能夠平滑地繪製一個圓(橢圓),以便您可以看到它正在屏幕上繪製。使用XAML在WPF中動畫繪製圓
反正是有可能使用DoubleAnimation是做到這一點?如果不是什麼是一種替代方法?
什麼,我有一個例子:
- 一個外部橢圓形(黑色)
- 內橢圓(白色) - 這是一個我想動畫
代碼:
<Ellipse Width="200" Height="200" Stroke="Black" StrokeThickness="20"/>
<Ellipse Width="190" Height="190" Stroke="White" StrokeThickness="10" Canvas.Left="5" Canvas.Top="5" x:Name="animatedEllipse">
<Ellipse.Triggers>
<EventTrigger RoutedEvent="Ellipse.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Ellipse.Triggers>
</Ellipse>
我看了幾個例子,例如:
- http://elegantcode.com/2009/08/21/a-simple-wpf-loading-animation/
- http://www.charlespetzold.com/blog/2012/03/The-Animated-Pie-Slice-in-Windows-8.html
- Ellipse Drawing WPF Animation
前兩個是我作爲新的WPF動畫有點confusimg。後者有7票作爲「正確的答案」,但它不適合我,因爲我收到錯誤「集合元素StrokeDashArray [0]不是一個依賴屬性」(我也不想破折號,雖然我試過這甚至與破折號橢圓按照上面的文章,它還是沒有對這個錯誤
更新:
我有一種方法,使用代碼排序的工作是這樣的:
public static class ExtensionMethods
{
private static Action EmptyDelegate = delegate() { };
public static void Refresh(this UIElement uiElement)
{
uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
}
}
public partial class Page1 : Page
{
private void Page_Loaded_1(object sender, RoutedEventArgs e)
{
path = new Path();
group = new GeometryGroup();
path.Data = group;
path.Stroke = new SolidColorBrush(Colors.White);
path.StrokeThickness = 3;
canvas.Children.Add(path);
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
int radius = 90;
for (double i = 0.0; i < 360.0; i += 1)
{
double angle = i * System.Math.PI/180;
double x = (int)(100 + radius * System.Math.Cos(angle));
double y = (int)(100 + radius * System.Math.Sin(angle));
canvas.Dispatcher.Invoke(new Action(delegate
{
group.Children.Add(new EllipseGeometry(new Point(x, y), 5, 5));
}));
canvas.Refresh();
System.Threading.Thread.Sleep(1);
}
}
我無法將此工作納入工作。目前我唯一使用的方法是使用一些代碼,但似乎有點令人費解。我加入了問題。 –