C# WPF在XAML的继承类中使用override属性
我有一个小问题,找不到任何解决办法。也许这是VisualStudio中的一个问题 我创建了一个从Image继承的新类。然后重写源属性C# WPF在XAML的继承类中使用override属性,c#,wpf,xaml,C#,Wpf,Xaml,我有一个小问题,找不到任何解决办法。也许这是VisualStudio中的一个问题 我创建了一个从Image继承的新类。然后重写源属性 class GifImage : Image { public new ImageSource Source { get { return base.Source; } set { MesssageBox("new source property");
class GifImage : Image
{
public new ImageSource Source
{
get { return base.Source; }
set
{
MesssageBox("new source property");
base.Source = value;
}
}
}
如果我在代码中设置源代码
GifImage gifImage = new GifImage();
gifImage.Source = gifimage2;
然后将源正确设置为GifImage,并显示MessageBox
但如果我在Xaml代码中设置源代码:
<my1:GifImage Stretch="Uniform" Source="/WpfApplication1;component/Images/Preloader.gif" />
但这仍然不起作用
是否有人有相同的问题或/和解决方案?您无法在WPF中以这种方式重写DependencyProperty 由于图像上的Source属性是DependencyProperty,因此在XAML(和其他位置)中指定该值时,使用
DependencyObject.SetValue(SourceProperty, value)
一种可能的解决方案是重写DependencyProperty的元数据并添加更改侦听器,例如
static GifImage()
{
SourceProperty.OverrideMetadata(typeof(GifImage), new FrameworkPropertyMetadata(new PropertyChangedCallback(SourcePropertyChanged)));
}
private static void SourcePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
MessageBox("new source property");
}
或者交替使用DependencyPropertyDescriptor
DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(Image.SourceProperty, typeof(Image));
if (dpd != null)
{
dpd.AddValueChanged(tb, delegate
{
MessageBox("new source property");
});
}
对于第一个解决方案,我得到一个ArgumentException,即PropertyMetadata仍然按类型“Image”注册,我在SourceProperty中发现了错误;我必须使用我的控件类型来覆盖它。这里的类型(GifImage)太棒了,很高兴你能工作。我正要制作一个小应用程序来找出我做错了什么。我将更新答案以更改类型。
DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(Image.SourceProperty, typeof(Image));
if (dpd != null)
{
dpd.AddValueChanged(tb, delegate
{
MessageBox("new source property");
});
}