Why does accessing my x: Name storyboard work in Silverlight but not in WPF?

The following WPF code receives an error: The name "zipButtonOut" does not exist in the current context.

However, identical code works in Silverlight, as I demonstrate here: http://tanguay.info/web/index.php?pg=codeExamples&id=65

What do I need to do with WPF code to be able to access the Storyboard in Window.Resources? I also tried it in UserControl WPF, but got the same error.

XAML:

<Window x:Class="TestDataGrid566.Test1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Test1" Height="300" Width="300"> <Window.Resources> <Storyboard x:Name="zipButtonOut" x:Key="zipButtonOut"> <DoubleAnimation Storyboard.TargetName="buttonContinue" Storyboard.TargetProperty="Width" From="0" To="300" Duration="0:0:.2"></DoubleAnimation> <DoubleAnimation Storyboard.TargetName="buttonContinue" Storyboard.TargetProperty="Height" From="2" To="50" Duration="0:0:.4"></DoubleAnimation> </Storyboard> </Window.Resources> <Grid x:Name="LayoutRoot" Background="White"> <StackPanel HorizontalAlignment="Center" Margin="20"> <Button x:Name="buttonBegin" Content="Click here to begin" Background="Green" Click="buttonBegin_Click"/> <Button x:Name="buttonContinue" Margin="0 70 0 0" Width="160" Height="2" FontSize="18" Background="Yellow" Content="Click here to continue" Visibility="Collapsed"></Button> </StackPanel> </Grid> </Window> 

background code:

 using System.Windows; namespace TestDataGrid566 { public partial class Test1 : Window { public Test1() { InitializeComponent(); } private void buttonBegin_Click(object sender, RoutedEventArgs e) { buttonBegin.Visibility = Visibility.Collapsed; buttonContinue.Visibility = Visibility.Visible; //zipButtonOut.Begin(); //GETS ERROR: The name 'zipButtonOut' does not exist in the current context. } } } 
+6
wpf storyboard
source share
2 answers

I don’t know why it works in Silverlight, but in the WPF controls that you add to the resource collection it is not available by their x: Name in the code behind. They are accessible through collecting resources by their x: Key, so you can remove the x: Name attribute and add the next line of code immediately before the line of your code that is commented out, and it will work (uncomment the line in question, of course):

 Storyboard zipButtonOut = (Storyboard)Resources["zipButtonOut"]; 

Note that this requires the following using statement:

 using System.Windows.Media.Animation; 
+12
source share

VS Silverlight tools seem to be generating the "zipButtonOut" accessory for x: Resource Names. In the future, just take a look at the generated file (possibly "test1.g.cs") in the obj folder to find out what code is created for x: Names.

0
source share

All Articles