我正在为其中一个属性创建一个默认值的用户控件。这是我目前正在做的事情。
<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); }
}
}
}
问题是在查看预览窗口时它没有显示我的默认值。
但是,如果我将控件放在其他内容中,则会显示默认文本。
当我在UserControl
时,它没有出现在设计师的事实让我担心我没有以正确的方式做到这一点。我是否正确地向用户公开属性,或者如果没有,公开控件用户可以覆盖的属性的正确方法是什么?
答案 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。通过这种方式,您可以在进行下一次更改时参考它。重复这个过程可以完成工作。