2009-03-25 20 views
6

El siguiente código WPF obtiene el error: El nombre 'zipButtonOut' no existe en el contexto actual.¿Por qué el acceso a mi Storyboard x: Name funciona en Silverlight pero no en WPF?

Sin embargo, el mismo código funciona en Silverlight como demuestro aquí: http://tanguay.info/web/index.php?pg=codeExamples&id=65

¿Qué tengo que hacer para el código de WPF para poder acceder al Storyboard dentro Window.Resources? Lo probé en un UserControl de WPF también, pero obtuve el mismo 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> 

de código subyacente:

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

Respuesta

12

no sé por qué funciona en Silverlight, pero en WPF controles que se suman a la colección de recursos se no disponible por su x: Nombre en el código detrás. Se puede acceder a ellos a través de la colección de recursos con su clave x: para eliminar el atributo x: Name y agregar la siguiente línea de código justo antes de que se comente la línea en el código que está atrás, y funcionará (comentario la línea en cuestión, por supuesto):

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

Tenga en cuenta que esto requiere la siguiente instrucción using:

using System.Windows.Media.Animation; 
0

Parece que las herramientas VS Silverlight generar un descriptor de acceso "zipButtonOut" para x: los recursos de nombre también . En el futuro, solo eche un vistazo al archivo generado (probablemente "test1.g.cs") en la carpeta obj para ver qué código se genera para x: Names.

Cuestiones relacionadas