我已经从Label创建了一个自定义控件。我添加了一个新的依赖属性“MyCaption”。我将Content proeprty视为隐藏:
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public new string Content { get; set; }
现在,我想要这种行为:如果我设置MyCaption值,我希望在设计时也使用该值设置内容。
一些想法?
编辑:我试图像这样定义我的依赖属性,但它不起作用:
public static readonly DependencyProperty MyCaptionProperty =
DependencyProperty.Register("MyCaption ",
typeof(string),
typeof(TMSLabel));
[Description("Valore della label"), Category("MyProperties")]
public string MyCaption
{
get { return (string)GetValue(MyCaptionProperty); }
set {
SetValue(MyCaptionProperty, value);
Content = value;
}
}
提示:如果我删除使得内容属性为隐藏的代码,则上面的代码可以工作!
答案 0 :(得分:0)
从 - http://wpftutorial.net/DependencyProperties.html
重要说明:不要向这些属性添加任何逻辑,因为只有在从代码设置属性时才会调用它们。如果从XAML设置属性,则直接调用SetValue()方法。
因此,尝试从“依赖项属性”设置设置“内容”属性听起来不对。
如何尝试使用PropertyChangedCallBack
public class MyLabel : Label
{
public static readonly DependencyProperty MyCaptionProperty =
DependencyProperty.Register("MyCaption ",
typeof(string),
typeof(MyLabel), new FrameworkPropertyMetadata(string.Empty, OnChangedCallback));
public string MyCaption
{
get { return (string)GetValue(MyCaptionProperty); }
set { SetValue(MyCaptionProperty, value); }
}
private static void OnChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var labelControl = d as Label;
if (labelControl != null)
labelControl.Content = e.NewValue;
}
}
<Window x:Class="WpfTestProj.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfTestProj="clr-namespace:WpfTestProj"
Title="MainWindow" Height="350" Width="525">
<wpfTestProj:MyLabel MyCaption="This is a test" />