【发布时间】:2013-03-14 21:42:48
【问题描述】:
我刚刚开始 WPF,这让我非常沮丧。似乎许多属性默认为空(至少是我目前正在处理的那些),因此当它编译和运行时,什么也没有发生。
是否有快速的方法或标准的工作流程来设置 WPF 对象的默认值?
例如,我在 XAML 视图中放置了一个 Canvas 和一个 Button,然后转到代码视图将 Button 上的事件处理程序添加到 Canvas.Children.Add(new Ellipse()),然后没有任何反应。然后我想也许我应该指定宽度和高度。仍然没有任何反应。最后,经过一番挣扎,我找到了Shape.Stroke 属性。
那么就没有直观的Ellipse.X 和Ellipse.Y 来定位Ellipse。同样,花了一个小时找到Canvas.SetLeft()。
最后一根稻草是当我尝试做Canvas.SetLeft(Random.Next(0, (int)Canvas.Width)); 它给出一个运行时错误 因为Canvas.Width 是NULL?!!?天哪……
当然,WPF 提供了很多功能,但似乎很多工作来自 Winforms Graphics.DrawEllipse() .. *sweat*
【问题讨论】:
-
你好杰克。还记得我告诉过你不要在代码中操作 UI 元素吗?这就是为什么。在这种情况下,您应该使用
ActualWidth而不是Width。 -
另外,我强烈建议您使用Snoop。这将在处理 WPF 可视化树时为您提供很多帮助(您可以检查正在运行的应用程序,并查看可视化树中的内容以及所有内容的所有属性。
-
再为 Snoop 投票:它将让您的生活更加愉快。
-
@Jerkimball 我错过了鼠标点击,我把赏金给了另一个人。对不起,我欠你的债.. =(
-
Sure, WPF gives a lot of features, but seems like a lot of work coming from a Winforms Graphics.DrawEllipse() .. *sweat*- 问题是你太习惯于 winforms 及其所有的 hack。 WPF 需要完全不同的心态(我也已经告诉过你了)。不要试图以 winforms 的方式使用 WPF,你不会有这些挫败感。 WPF 没有挫败感,只有简单、简单的属性和INotifyPropertyChanged...
标签: wpf wpf-controls