首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XAML故事板DependencyObject错误

XAML故事板DependencyObject错误
EN

Stack Overflow用户
提问于 2016-05-27 17:21:22
回答 1查看 218关注 0票数 0

我在我的XAML应用程序中遇到了一个错误。

我收到的错误是

“未知”属性不指向路径中的DependencyObject '(0).(1)2.(2)‘。

我搜索了一下,发现需要在Page.XAML for RotateTransform中的RotateTransform标记中找到一些东西,但是我不知道为什么,因为我对XAML还很陌生,而且还在学习。

App.XAML

代码语言:javascript
复制
<Storyboard x:Key="spin">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" 
                                           Storyboard.TargetName="{Binding}"
                                           RepeatBehavior="Forever">
                <EasingDoubleKeyFrame KeyTime="0:0:1" 
                                      Value="360"/>
            </DoubleAnimationUsingKeyFrames>
</Storyboard>

Page.XAML

代码语言:javascript
复制
<Page.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
            <BeginStoryboard Storyboard="{DynamicResource spin}"/>
        </EventTrigger>
</Page.Triggers>

<Image x:Name="image1" 
       Margin="0, 0, 5, 0" 
       Source="{StaticResource inProcessImage}"
       Width="18" 
       RenderTransformOrigin="0.5,0.5">
    <Image.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </Image.RenderTransform>
</Image>

<Image x:Name="image2" 
       Margin="0, 0, 5, 0"  
       Source="{StaticResource inProcessImage}"
       Width="18"  
       RenderTransformOrigin="0.5,0.5">
    <Image.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </Image.RenderTransform>
</Image>

代码背后

代码语言:javascript
复制
startAni("spin", image1.Name);
startAni("spin", image2.Name);

void startAni(string storyboardName, string objectName)
{
    Storyboard sb = FindResource(storyboardName) as Storyboard;

    foreach (var child in sb.Children)
        Storyboard.SetTargetName(child, objectName);

    sb.Begin(this); // do not forget the this keyword
}
EN

回答 1

Stack Overflow用户

发布于 2016-05-27 18:48:50

此错误是由以下部分引起的:

代码语言:javascript
复制
<Page.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
            <BeginStoryboard Storyboard="{DynamicResource spin}"/>
        </EventTrigger>
</Page.Triggers>

事件触发器没有正确加载情节提要(没有设置TargetName)。所以你看到了这个错误。

您可以将startAni调用放在页面的加载事件中(代码后面)。这对我来说很好:

代码语言:javascript
复制
    public Page() {

        InitializeComponent();

        Loaded += Page_Loaded;

    }

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        startAni("spin", image1.Name);
        startAni("spin", image2.Name);
    }

只有XAML解决方案如下所示:

代码语言:javascript
复制
<TimelineCollection x:Key="Ani">
            <DoubleAnimationUsingKeyFrames 

                Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" 
                                           Storyboard.TargetName="{Binding}"
                                           RepeatBehavior="Forever">
                <EasingDoubleKeyFrame KeyTime="0:0:1" 
                                      Value="360"/>
            </DoubleAnimationUsingKeyFrames>
</TimelineCollection>

使用TimelineCollection代替故事板,然后您可以在Page.XAML中设置TargetName,这根本不需要后面的代码。

代码语言:javascript
复制
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
    <BeginStoryboard>
        <Storyboard TargetName="image1" Children="{DynamicResource Ani}" />
    </BeginStoryboard>
    <BeginStoryboard>
        <Storyboard TargetName="image2" Children="{DynamicResource Ani}" />
    </BeginStoryboard>
</EventTrigger>

另一种方法是将故事板放置在样式中,并将样式应用于每个图像。这将更加清晰和可重用。你可以大致知道如何做那个here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37489160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档