'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 中获得这个故事板
很抱歉,如果这是一个重复的问题,但我只有 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 中获得这个故事板