我刚刚开始参加WPF,这令我感到沮丧。似乎许多属性默认为null(至少我目前正在处理的那些属性),因此当它编译并运行时,没有任何反应。
是否有快速方法或标准工作流程来设置WPF对象的默认值?
例如,我在XAML视图中放置了Canvas和Button,然后转到代码视图,将Button上的事件处理程序添加到Canvas.Children.Add(new Ellipse())
,然后没有任何反应。然后我想也许我应该指定宽度和高度。仍然没有任何反应最后,经过多次努力,我找到了Shape.Stroke
属性。
然后没有直观的Ellipse.X
和Ellipse.Y
来定位椭圆。再次,花了一个小时才找到Canvas.SetLeft()
。
最后一点是当我尝试Canvas.SetLeft(Random.Next(0, (int)Canvas.Width));
它会产生运行时错误,因为Canvas.Width
是NULL
?!!?善...
当然,WPF提供了很多功能,但似乎很多工作来自Winforms Graphics.DrawEllipse()
.. *汗*
答案 0 :(得分:2)
在WPF中,如果您未在Width/Heigh
中明确设置xaml
t,则Elements
布局Container
会确定尺寸,以便访问Width/Height
像这样的元素你使用属性ActualWidth/Actualheight
,这些属性返回Rendered
Element
大小
示例:
Canvas.SetLeft(Random.Next(0, (int)Canvas.ActualWidth));
如果您要为Default
创建Element
值,可以在xaml中为Element
示例:
<Style TargetType="Ellipse">
<Setter Property="Stroke" Value="Black"/>
</Style>
答案 1 :(得分:1)
WPF确实有一个粗略的学习曲线。其中一个更难的事情是略微使用您可能习惯的技术并采用WPF方法。 Xaml是定义控件及其属性的方法 - Xaml是一种语言,它的唯一真正目的是做好声明。实质上,将代码的Xaml部分视为美化的构造函数。
<Window x:Class="TestWpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Window"
Title="MainWindow"
Width="640"
Height="480">
<Canvas>
<Ellipse Canvas.Left="50"
Canvas.Top="50"
Width="142"
Height="88"
Fill="Black" />
</Canvas>
</Window>
上面的声明利用了Xaml对Attached Properties的漂亮语法。
如果您发现自己经常在类似对象上设置一组常用属性,则可能需要调查Styles。