派生类型也成为基类中定义的依赖属性的所有者(在WPF/XAML中)
本文关键字:所有者 WPF XAML 属性 依赖 基类 类型 派生 定义 | 更新日期: 2023-09-27 18:15:43
在其中一个模块中,我看到了以下样式被设置。
<Style TargetType="Rectangle">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="300" Duration="0:0:1.5"
AccelerationRatio="0.10" DecelerationRatio="0.25"
Storyboard.TargetProperty="(Canvas.Width)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
注意TargetType
为Rectangle
, Storyboard.TargetProperty
为Canvas.Width
。样式/触发器仍然工作正常。它正在动画Rectangle.width
属性。
我明白在故事板。TargetProperty(或XAML中的其他任何地方),我们必须使用PropertyPath语法,就像(ownerType.PropertyName)
。
我的问题是如何设置动画在Canvas.Width
是动画Rectangle.Width
- 是因为Canvas。宽度、矩形。Width或FrameworkElement。Width全部指向FrameowrkElement。因为Width是在FrameworkElement中定义的,而Canvas/Rectangle是由它派生的。 还是因为,通过继承,Canvas和Rectangle都成为了依赖属性的所有者?
这是因为XAML编译器通过在Canvas
上查找一个名为WidthProperty
的静态字段来解析Canvas.Width
。由于Canvas
继承自FrameworkElement
,所以对Canvas.WidthProperty
的引用解析为FrameworkElement.WidthProperty
。
由于Rectangle
也继承自FrameworkElement
,因此将Canvas.WidthProperty
动画化与将Rectangle.WidthProperty
动画化相同,与将FrameworkElement.WidthProperty
动画化相同。
由于Width Property
是FrameworkElement
类的Property
,您可以输入从FrameworkElement
继承的每个Control
Storyboard.TargetProperty="(FrameworkElement.Width)"
但我最喜欢的是:
Storyboard.TargetProperty="(DataGrid.Width)"
试试。会成功的!