'storyboardName' 找不到资源。调用 XAML 到 C#

'storyboardName' resource not found. Call XAML to C#

很抱歉,如果这是一个重复的问题,但我只有 11 个声誉,我无法评论其他问题或做任何事情,所以我不得不再问一次。

我从这里获得了这段代码:code - Quaternion Structure,我想将它添加到我的项目中,但找不到 "QuaternionWText"、“endQuaternion”、"myQuaternionRotation3D" 和 "myRotateTransform3D".

然后我从这里问的另一个问题中找到了这部分代码:

XAML代码

 <Storyboard x:Key="TheStoryboard" x:Name="storyboardName">
        <DoubleAnimation Storyboard.TargetProperty="Height"
                         To="500"
                         Duration="0:0:0.10" />
           <DoubleAnimation From="0" 
                            To="1" 
                            Duration="0:0:0.25"
                            Storyboard.TargetName="MainFrame" 
                            Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(ScaleTransform.ScaleY)"/>
    </Storyboard>

C#代码

 Storyboard story = (Storyboard)this.FindResource("storyboardName");
            this.BeginStoryboard(story);

但是当我 运行 代码时,我收到 'storyboardName' 找不到资源的错误。

我的class为XAML名字是XplorerMainWindow.xaml,cs项目名字是XplorerMainWindow.xaml.cs。我要添加上述 C# 代码的 class 的名称名为“private void CreateWorker()”。我的 XAML 代码中的所有 x:names 是:"MainFrame"、"DockingManager"、"MainPanel"、"MainDocPanel"、"DrawingControl".

我想要做的是我有一个 3D 模型,我想使用四元数旋转它。但是我找到的所有示例都使用 XAML,但我总是收到错误消息,即他们无法找到应该从 XAML 调用的资源。那么我对目标名称做错了什么吗?我要根据我的 classes 和名字更改任何内容吗?我应该在其他地方添加 c# 代码而不是 CreatWorker() 吗?

编辑

<Window x:Class="XbimXplorer.XplorerMainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:xbim="http://schemas.Xbim.com/Presentation"
     xmlns:xbimView="clr-namespace:Xbim.IO.ViewModels;assembly=Xbim.IO"
    xmlns:local="clr-namespace:XbimXplorer"
xmlns:pt="clr-namespace:PropertyTools.Wpf;assembly=PropertyTools.Wpf" 
xmlns:avalonDock="http://schemas.xceed.com/wpf/xaml/avalondock"
Title="Xbim Xplorer" Height="600" Width="800" 
x:Name="MainWindow"
    Icon="xBIM.ico">
<Window.Resources>
    <ObjectDataProvider x:Key="ModelProvider"  IsInitialLoadEnabled="False" ></ObjectDataProvider>
    <DataTemplate DataType="{x:Type xbimView:XbimModelViewModel}">
        <Grid>
            <Grid.ColumnDefinitions>
                ....
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="1" Text="{Binding Name}" FontWeight="Bold"/>
        </Grid>
    </DataTemplate>

    <DataTemplate DataType="{x:Type xbimView:SpatialViewModel}">
        <Grid>
            <Grid.ColumnDefinitions>
               <....
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="1" Text="{Binding Name}" FontWeight="Bold"/>
        </Grid>
    </DataTemplate>

    <DataTemplate DataType="{x:Type xbimView:ContainedElementsViewModel}">
        <Grid>
            <Grid.ColumnDefinitions>
               .....
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="1" Text="{Binding Name}"/>
        </Grid>
    </DataTemplate>

    <DataTemplate DataType="{x:Type xbimView:IfcProductModelView}">
        <Grid>
            <Grid.ColumnDefinitions>
                .....
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="1" Text="{Binding Name}"/>
        </Grid>
    </DataTemplate>

 //Here is the Storyboard

      <Storyboard x:Key="TheStoryboard" x:Name="storyboardName">
        <DoubleAnimation Storyboard.TargetProperty="Height"
                     To="500"
                     Duration="0:0:0.10" />
        <DoubleAnimation From="0" 
                        To="1" 
                        Duration="0:0:0.25"
                        Storyboard.TargetName="MainFrame" 
                        Storyboard.TargetProperty="   (FrameworkElement.LayoutTransform).(ScaleTransform.ScaleY)"/>
    </Storyboard>

</Window.Resources>

这就是我在 XplorerMainWindow.xaml.cs

中的称呼
 private void SpatialControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {

        Storyboard story = (Storyboard)this.FindResource("storyboardName");
        this.BeginStoryboard(story);
}

您似乎试图从另一个 window 那里获取 Storyboard。这意味着,如果您想在代码隐藏中获取一些资源,您应该将该资源放在当前 window 中。 有关详细信息,请访问 How to: Retrieve Resources in Code

PS

这里是一个声明和使用资源的例子:

<Window x:Class="XbimXplorer.XplorerMainWindow" ...>
    <Window.Resources>
        <Storyboard x:Key="TheStoryboard" />
    </Window.Resources>
...
</Window>

而且你可以在 .cs 中获得这个故事板