派生类型也成为基类中定义的依赖项属性的所有者(在WPF/XAML中)

Til*_*lak 5 .net c# wpf xaml dependency-properties

在其中一个模块中,我看到了以下样式设置.

<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>
Run Code Online (Sandbox Code Playgroud)

注意,TargetTypeRectangle,Storyboard.TargetPropertyCanvas.Width.样式/触发器仍然正常工作.这是动画的Rectangle.width财产.

我理解在Storyboard.TargetProperty(或XAML中的任何其他地方),我们必须使用PropertyPath语法,就像(ownerType.PropertyName).

我的问题是如何设置动画Canvas.Width是动画Rectangle.Width

  1. 是因为Canvas.Width,Rectangle.Width或FrameworkElement.Width都指向FrameowrkElement.Width属性,因为Width在FrameworkElement中定义,Canvas/Rectangle是从它派生的.
  2. 或者是因为继承,Canvas和Rectangle都成为依赖属性的所有者.

Ken*_*art 1

这是因为 XAML 编译器Canvas.Width通过查找名为WidthPropertyon的静态字段来进行解析Canvas。由于Canvas继承自FrameworkElement,因此对 的引用解析Canvas.WidthPropertyFrameworkElement.WidthProperty

因为Rectangle也是继承自FrameworkElement,动画Canvas.WidthProperty同动画Rectangle.WidthProperty,同动画FrameworkElement.WidthProperty