2010-11-11 3 views
1

У меня есть две анимации, определенные в моем приложении Silverlight:Можно ли глобально определить Silverlight 4 Storyboard Animations?

<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> 

Когда эти раскадровки определены во внешнем файле стилей 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(); 
     } 

Любые идеи?

ответ

2

Есть несколько вещей, которые я мог бы обнаружить

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();  
    } 
    } 
} 
+0

ty для наконечника sir = D – BentOnCoding

Смежные вопросы