2009-03-25 8 views
6

Der folgende WPF-Code erhält den Fehler: Der Name 'zipButtonOut' existiert nicht im aktuellen Kontext.Warum funktioniert der Zugriff auf mein Storyboard x: Name in Silverlight, aber nicht in WPF?

jedoch der gleiche Code funktioniert in Silverlight, wie ich hier zeigen: http://tanguay.info/web/index.php?pg=codeExamples&id=65

Was habe ich mit dem WPF-Code tun zu können, die Storyboard innerhalb Window.Resources zugreifen? Ich habe es auch in einem WPF UserControl versucht, aber den gleichen Fehler bekommen.

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

Antwort

12

Ich weiß nicht, warum es in Silverlight funktioniert, aber in WPF-Steuerelemente Sie auf die Ressourcen Sammlung werden nicht verfügbar durch ihr x: Name im Code dahinter. Sie sind über die Resources-Auflistung über ihren x: Key zugänglich, sodass Sie das x: Name-Attribut entfernen und die folgende Codezeile hinzufügen können, bevor die Zeile in Ihrem Code dahinter auskommentiert wird und funktioniert (Auskommentierung) die Linie in Frage, natürlich):

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

Beachten Sie, dass dies die folgende using-Anweisung erfordert: Name Ressourcen auch:

using System.Windows.Media.Animation; 
0

wie die VS Silverlight Tools sieht eine "zipButtonOut" Accessor für x erzeugen . Sehen Sie sich in Zukunft die generierte Datei (wahrscheinlich "test1.g.cs") im obj-Ordner an, um zu sehen, welcher Code für x: Names generiert wird.

Verwandte Themen