如果可能,如何为属性设置WPF默认值?

时间:2013-03-14 21:42:49

标签: wpf wpf-controls

我刚刚开始参加WPF,这令我感到沮丧。似乎许多属性默认为null(至少我目前正在处理的那些属性),因此当它编译并运行时,没有任何反应。

是否有快速方法或标准工作流程来设置WPF对象的默认值?

例如,我在XAML视图中放置了Canvas和Button,然后转到代码视图,将Button上的事件处理程序添加到Canvas.Children.Add(new Ellipse()),然后没有任何反应。然后我想也许我应该指定宽度和高度。仍然没有任何反应最后,经过多次努力,我找到了Shape.Stroke属性。

然后没有直观的Ellipse.XEllipse.Y来定位椭圆。再次,花了一个小时才找到Canvas.SetLeft()

最后一点是当我尝试Canvas.SetLeft(Random.Next(0, (int)Canvas.Width));它会产生运行时错误,因为Canvas.WidthNULL?!!?善...

当然,WPF提供了很多功能,但似乎很多工作来自Winforms Graphics.DrawEllipse() .. *汗*

2 个答案:

答案 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