Вот хороший подход:
Ваше представление может напоминать это (обратите внимание, что контекст данных декоративно настроен на вашу модель представления, а свойство раскадровки на нем установлено на раскадровку статического ресурса):
<UserControl x:Class="SilverlightApplication2.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"
xmlns:local="clr-namespace:SilverlightApplication2"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<Storyboard x:Name="MyStoryboard">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="firstGrid" Storyboard.TargetProperty="(UIElement.Opacity)">
<EasingDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
<UserControl.DataContext>
<local:My_ViewModel MyStoryboard="{StaticResource MyStoryboard}" />
</UserControl.DataContext>
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<Grid x:Name="firstGrid" Height="100" Width="100" Background="Red" />
<Button x:Name="firstButton" Content="Click Me" Click="firstButton_Click" Height="100" Width="100" />
</StackPanel>
</Grid>
Ваша модель представления будет выглядеть так:
public class My_ViewModel
{
public Storyboard MyStoryboard { get; set; }
}
А в коде вашего представления у вас может быть что-то вроде этого:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private My_ViewModel _viewModel
{
get { return this.DataContext as My_ViewModel; }
}
private void firstButton_Click(object sender, RoutedEventArgs e)
{
this._viewModel.MyStoryboard.Begin();
}
}
Надеюсь, это поможет!