【问题标题】:Is it possible to globally define Silverlight 4 Storyboard Animations?是否可以全局定义 Silverlight 4 Storyboard Animations?
【发布时间】:2010-11-11 18:28:25
【问题描述】:

我在 silverlight 应用程序中定义了两个动画:

<Storyboard x:Name="ShowControls">
    <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="SlideOutMenu" />
</Storyboard>
<Storyboard x:Name="Hide-Controls">
    <DoubleAnimation Duration="0:0:0.2" To="180" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="SlideOutMenu" />
</Storyboard> 

当这些 Storyboard 在外部样式 xaml 文件中定义时,它们不起作用。我无法弄清楚为什么我不能以编程方式访问这些资源。

此代码适用于其他资源类型,如画笔和模板,所以...我怀疑此资源字典问题特定于 Storyboard 类型的资源。

这是引发错误的代码: (SlideOutMenu 是一个边框控件)。

public void AddEventHandlers()
        {
            SlideOutMenu.MouseEnter += new MouseEventHandler(SlideOutMenu_MouseEnter);
            SlideOutMenu.MouseLeave += new MouseEventHandler(SlideOutMenu_MouseLeave);
        }

        public void SlideOutMenu_MouseEnter(object sender, MouseEventArgs e)
        {

            Storyboard showMenu = Application.Current.Resources["ShowControls"] as Storyboard;
            showMenu.Begin();
        } 

有什么想法吗?

【问题讨论】:

    标签: c# silverlight


    【解决方案1】:

    我可以发现一些东西

    1- 故事板名称Hide-Controls 不是有效名称,您需要删除-

    2- 您正在制作动画的属性名称不正确 TranslateX 应该是 X。我假设您使用的是标准的TranslateTransform

    3- 您需要在事件处理程序中连接目标属性。

    这是我做的一个快速测试

    App.xaml

    <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                 x:Class="SilverlightApplication1.App"
                 >
      <Application.Resources>
        <Storyboard x:Name="ShowControls">
          <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"  />
        </Storyboard>
        <Storyboard x:Name="HideControls">
          <DoubleAnimation Duration="0:0:0.2" To="180" Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"  />
        </Storyboard>
      </Application.Resources>
    </Application>
    

    MainPage.xaml

    <UserControl x:Class="SilverlightApplication1.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">  
      <Canvas x:Name="LayoutRoot" Background="White" Loaded="LayoutRoot_Loaded">
        <Border x:Name="SlideOutMenu" BorderBrush="Red" BorderThickness="5">
          <Border.RenderTransform>
            <TranslateTransform X="100" />
          </Border.RenderTransform>
          <ListBox Height="200" Width="100" />
        </Border>
      </Canvas>
    </UserControl>
    

    MainPage.xaml.cs

    using System.Windows.Shapes;
    
    namespace SilverlightApplication1
    {
      public partial class MainPage : UserControl
      {
        public MainPage()
        {
          InitializeComponent();
          AddEventHandlers();
        }
    
        public void AddEventHandlers()
        {
          SlideOutMenu.MouseEnter += new MouseEventHandler(SlideOutMenu_MouseEnter);
    
        }
    
        public void SlideOutMenu_MouseEnter(object sender, MouseEventArgs e)
        {
          Storyboard showMenu = Application.Current.Resources["ShowControls"] as Storyboard;
          Storyboard.SetTarget(showMenu, SlideOutMenu);
          showMenu.Begin();      
        } 
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2018-02-13
      • 2019-05-28
      • 2021-04-10
      • 2016-08-09
      • 2020-06-27
      • 1970-01-01
      相关资源
      最近更新 更多