将 Silverlight 故事板移植到 WPF
Port Silverlight Storyboard to WPF
尝试将旧 Silverlight 应用程序的一些行为移植到 WPF,该应用程序允许用户通过 moving/minimizing/maximizing 各种 UserControls 配置他们的视图。在 UserControl.Resources 中声明了几个 StoryBoard,然后通过它们的 x:Name.
从代码中访问
<Storyboard x:Name="MaximizeStoryboard" Completed="MaximizeStoryboard_Completed" Storyboard.TargetName="WholeControl">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(FrameworkElement.Width)">
<SplineDoubleKeyFrame x:Name="MaximizeWidth" KeyTime="00:00:00.3000000" Value="0"/>
</DoubleAnimationUsingKeyFrames>
...
在 WPF 中,将 x:Name 更改为 x:Key 后,我可以通过以下方式访问 Storyboard:
Storyboard maximizeStoryboard = (Storyboard)Resources["MaximizeStoryboard"];
以前用过
MaximizeWidth.Value = Container.Contents.ActualWidth;
在开始动画之前,通过代码设置恢复宽度(和其他值)。这在 WPF 中不起作用。获得访问权以便可以从代码设置这些值的正确方法是什么?
一种可能的方法是通过Storyboard
的children,找到DoubleAnimationUsingKeyFrames
child,然后得到第一个KeyFrame
。
Storyboard maximizeStoryboard = (Storyboard)Resources["MaximizeStoryboard"];
var doubleAnimationUsingKeyFrames = maximizeStoryboard.Children.OfType<DoubleAnimationUsingKeyFrames>().FirstOrDefault();
if (doubleAnimationUsingKeyFrames != null)
{
if (doubleAnimationUsingKeyFrames.KeyFrames.Count > 0)
{
var keyFrame = doubleAnimationUsingKeyFrames.KeyFrames[0] as SplineDoubleKeyFrame;
if(keyFrame !=null)
{
keyFrame.Value = Container.Contents.ActualWidth;
}
}
}
尝试将旧 Silverlight 应用程序的一些行为移植到 WPF,该应用程序允许用户通过 moving/minimizing/maximizing 各种 UserControls 配置他们的视图。在 UserControl.Resources 中声明了几个 StoryBoard,然后通过它们的 x:Name.
从代码中访问<Storyboard x:Name="MaximizeStoryboard" Completed="MaximizeStoryboard_Completed" Storyboard.TargetName="WholeControl">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(FrameworkElement.Width)">
<SplineDoubleKeyFrame x:Name="MaximizeWidth" KeyTime="00:00:00.3000000" Value="0"/>
</DoubleAnimationUsingKeyFrames>
...
在 WPF 中,将 x:Name 更改为 x:Key 后,我可以通过以下方式访问 Storyboard:
Storyboard maximizeStoryboard = (Storyboard)Resources["MaximizeStoryboard"];
以前用过
MaximizeWidth.Value = Container.Contents.ActualWidth;
在开始动画之前,通过代码设置恢复宽度(和其他值)。这在 WPF 中不起作用。获得访问权以便可以从代码设置这些值的正确方法是什么?
一种可能的方法是通过Storyboard
的children,找到DoubleAnimationUsingKeyFrames
child,然后得到第一个KeyFrame
。
Storyboard maximizeStoryboard = (Storyboard)Resources["MaximizeStoryboard"];
var doubleAnimationUsingKeyFrames = maximizeStoryboard.Children.OfType<DoubleAnimationUsingKeyFrames>().FirstOrDefault();
if (doubleAnimationUsingKeyFrames != null)
{
if (doubleAnimationUsingKeyFrames.KeyFrames.Count > 0)
{
var keyFrame = doubleAnimationUsingKeyFrames.KeyFrames[0] as SplineDoubleKeyFrame;
if(keyFrame !=null)
{
keyFrame.Value = Container.Contents.ActualWidth;
}
}
}