在WPF中使用默认值创建公开属性的正确方法是什么?

时间:2014-07-10 15:52:02

标签: c# wpf xaml

我正在为其中一个属性创建一个默认值的用户控件。这是我目前正在做的事情。

<UserControl x:Class="Example.HelloWorld"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             x:Name="This">
    <Grid>
            <TextBlock Text="{Binding ElementName=This, Path=TextToDisplay}"/>
    </Grid>
</UserControl>
using System.Windows;
using System.Windows.Controls;

namespace Example
{
    /// <summary>
    /// Interaction logic for HelloWorld.xaml
    /// </summary>
    public partial class HelloWorld : UserControl
    {


        public HelloWorld()
        {
            InitializeComponent();
        }

        public static readonly DependencyProperty TextToDisplayProperty = DependencyProperty.Register("TextToDisplay", typeof(string),
            typeof(HelloWorld), new PropertyMetadata("Hello World!"));

        public string TextToDisplay
        {
            get { return (string)GetValue(TextToDisplayProperty); }
            set { SetValue(TextToDisplayProperty, value); }
        }
    }
}

问题是在查看预览窗口时它没有显示我的默认值。

enter image description here

但是,如果我将控件放在其他内容中,则会显示默认文本。

enter image description here

当我在UserControl时,它没有出现在设计师的事实让我担心我没有以正确的方式做到这一点。我是否正确地向用户公开属性,或者如果没有,公开控件用户可以覆盖的属性的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您已正确声明了DependencyProperty的默认值,如MSDN上的DependencyProperty.Register Method (String, Type, Type, PropertyMetadata)PropertyMetadata Constructor (Object)页面所示:

public static DependencyProperty Register(
    string name,
    Type propertyType,
    Type ownerType,
    PropertyMetadata typeMetadata
)

...

public PropertyMetadata(
    Object defaultValue
)

请忽略您使用Visual Studio WPF设计器时遇到的任何问题,因为这一直存在(并导致)问题。 @ScottChamberlain,大多数WPF开发人员都是出于这个原因手工编写XAML ...... WPF Designer并没有帮助。每次运行应用程序时,请尝试拍摄屏幕截图,或使用截图工具捕获UI。通过这种方式,您可以在进行下一次更改时参考它。重复这个过程可以完成工作。