Gif*_*guy 11 .net c# dependency-properties exception invalidoperationexception
我正在尝试将一个PropertyChangedCallback添加到UIElement.RenderTransformOriginProperty.当我尝试覆盖PropertyMetadata时抛出异常.
我搜索过MSDN和谷歌,我能想到的就是这个.在该帖子的某些时候建议使用DependencyPropertyDescriptor.AddValueChanged,但这不会解决我的问题,因为这不是每个实例的回调.
我不明白这个例外意味着什么.有谁知道我做错了什么?
public class foo : FrameworkElement
{
private static void Origin_Changed( DependencyObject d,
DependencyPropertyChangedEventArgs e)
{ }
static foo()
{
PropertyMetadata OriginalMetaData =
UIElement.RenderTransformOriginProperty.GetMetadata(
typeof(FrameworkElement));
/*An exception is thrown when this line is executed:
"Cannot change property metadata after it has been associated with a property"*/
OriginalMetaData.PropertyChangedCallback +=
new PropertyChangedCallback(Origin_Changed);
UIElement.RenderTransformOriginProperty.OverrideMetadata(
typeof(foo), OriginalMetaData);
}
}
Run Code Online (Sandbox Code Playgroud)
Igo*_*aka 22
当您调用OverrideMetadata时,WPF将为您合并属性元数据,无需将原始元数据对象传递给它.所以你要做的就是
UIElement.RenderTransformOriginProperty.OverrideMetadata(typeof(foo), new PropertyMetadata(new PropertyChangedCallback(Origin_Changed)));
Run Code Online (Sandbox Code Playgroud)
有一点需要注意的是,有时上面的代码会引发异常.发生这种情况的两种情况是
1.原始元数据是PropertyMetadata的子类 - 我见过FrameworkPropertyMetadata和UIPropertyMetadata.您只需在每种情况下使用适当的一个.
2.依赖属性是只读的,你不能对它做任何事情.
| 归档时间: |
|
| 查看次数: |
5710 次 |
| 最近记录: |