【发布时间】:2011-09-14 16:10:25
【问题描述】:
是否可以实现可以在每个 GUI 控件(即 FrameworkElement)中指定的属性? 我想象的是像Tag这样的属性,但是,我宁愿不使用Tag,而是我自己的属性。
编辑:
由于 Felice 和 CodeNaked 的回复,我再次尝试使用附加依赖属性进行第一次实验。
尽管仔细检查了所有内容,但我的附加属性 (SetAdsName()) 的设置器永远不会被调用,尽管附加属性的注册成功且没有错误。
没有错误消息 - 与 WPF 一样。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ads="clr-namespace:WAL.UI.Lib.Ads.Binding;assembly=WAL.UI.Lib"
Title="Demo Page" Height="350" Width="525"
>
<Grid>
<Label ads:AdsNameRegistry.AdsName="SpecialLabelName" Content="Some Button Caption" />
</Grid>
</Window>
public class AdsNameRegistry : DependencyObject
{
public static readonly DependencyProperty AdsNameProperty = DependencyProperty.RegisterAttached( "AdsName", typeof(String), typeof(AdsNameRegistry), new FrameworkPropertyMetadata( "", FrameworkPropertyMetadataOptions.AffectsRender ) );
public static void SetAdsName( UIElement element, String value )
{
try
{
MessageBox.Show( "SetAdsName(value=" + value + ")" );
element.SetValue( AdsNameProperty, value );
}
catch (Exception ex)
{
Debug.Assert( false, "Exception in SetAdsName(): " + ex.Message + "\n\n" + ex );
throw;
}
}
public static String GetAdsName( UIElement element )
{
try
{
return (String) element.GetValue( AdsNameProperty );
}
catch (Exception ex)
{
Debug.Assert( false, "Exception in GetAdsName(): " + ex.Message + "\n\n" + ex );
throw;
}
}
}
}
我的第一个猜测是,永远不会调用 SetAdsName(),因为 XAML 编码中没有作为父元素的元素。 但这似乎是一个错误的结论。
问候, 七
【问题讨论】:
-
感谢所有响应者。你让我开心:-)
标签: wpf data-binding c#-4.0 properties