我在我的XAML应用程序中遇到了一个错误。
我收到的错误是
“未知”属性不指向路径中的DependencyObject '(0).(1)2.(2)‘。
我搜索了一下,发现需要在Page.XAML for RotateTransform中的RotateTransform标记中找到一些东西,但是我不知道为什么,因为我对XAML还很陌生,而且还在学习。
App.XAML
<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
<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>代码背后
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
}发布于 2016-05-27 18:48:50
此错误是由以下部分引起的:
<Page.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{DynamicResource spin}"/>
</EventTrigger>
</Page.Triggers>事件触发器没有正确加载情节提要(没有设置TargetName)。所以你看到了这个错误。
您可以将startAni调用放在页面的加载事件中(代码后面)。这对我来说很好:
public Page() {
InitializeComponent();
Loaded += Page_Loaded;
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
startAni("spin", image1.Name);
startAni("spin", image2.Name);
}只有XAML解决方案如下所示:
<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,这根本不需要后面的代码。
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard TargetName="image1" Children="{DynamicResource Ani}" />
</BeginStoryboard>
<BeginStoryboard>
<Storyboard TargetName="image2" Children="{DynamicResource Ani}" />
</BeginStoryboard>
</EventTrigger>另一种方法是将故事板放置在样式中,并将样式应用于每个图像。这将更加清晰和可重用。你可以大致知道如何做那个here
https://stackoverflow.com/questions/37489160
复制相似问题