2009-03-25 14 views
6

Il seguente codice WPF riceve l'errore: Il nome "zipButtonOut" non esiste nel contesto corrente.Perché l'accesso allo Storyboard x: Name funziona in Silverlight ma non in WPF?

Tuttavia, il codice identico funziona in Silverlight, come dimostro qui: http://tanguay.info/web/index.php?pg=codeExamples&id=65

Che cosa devo fare per il codice WPF per essere in grado di accedere al Storyboard entro Window.Resources? L'ho provato anche con un UserControl WPF, ma ho ottenuto lo stesso errore.

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> 

code-behind:

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

risposta

12

non so perché funziona in Silverlight, ma in WPF controlli si aggiunge alla raccolta di risorse sono non disponibile dal loro x: Nome nel codice dietro. Sono accessibili tramite la raccolta Risorse tramite la chiave x: Key, quindi è possibile rimuovere l'attributo x: Name e aggiungere la seguente riga di codice appena prima che la riga nel codice sottostante venga commentata e funzionerà (uncomment la linea in questione, ovviamente):

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

Si noti che questo richiede la seguente istruzione using:

using System.Windows.Media.Animation; 
0

Sembra che gli strumenti VS Silverlight generano una funzione di accesso "zipButtonOut" per x: Nome risorse anche . In futuro, basta dare un'occhiata al file generato (probabilmente "test1.g.cs") nella cartella obj per vedere quale codice viene generato per x: Names.

Problemi correlati