Pourquoi ne l'accès à mes Storyboard x: travail de nom dans Silverlight, mais pas dans WPF?

StackOverflow https://stackoverflow.com/questions/681054

  •  22-08-2019
  •  | 
  •  

Question

Le code WPF suivant obtient l'erreur. Le nom 'zipButtonOut' n'existe pas dans le contexte actuel

Cependant, le code identique fonctionne dans Silverlight comme je démontrerai ici: http: / /tanguay.info/web/index.php?pg=codeExamples&id=65

Que dois-je faire pour le code WPF pour pouvoir accéder au Storyboard au sein Window.Resources? Je l'ai essayé dans un UserControl WPF mais aussi bien obtenu la même erreur.

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.
        }
    }
}
Était-ce utile?

La solution

Je ne sais pas pourquoi cela fonctionne dans Silverlight, mais WPF vous contrôle ajouter à la collection des ressources ne sont pas disponibles par leur x: Nom dans le code sous-jacent. Ils sont accessibles par la collecte des ressources par leur x: Key, de sorte que vous pouvez supprimer l'attribut x: Nom et ajoutez la ligne de code suivante juste avant la ligne dans votre code derrière qui est mis en commentaire, et il va travailler (uncomment la ligne en question, bien sûr):

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

Notez que cela nécessite l'instruction using suivante:

using System.Windows.Media.Animation;

Autres conseils

On dirait les outils VS Silverlight génèrent un accesseur « zipButtonOut » pour x: ressources Nom aussi. À l'avenir, il suffit de regarder le fichier généré (probablement « test1.g.cs ») dans le dossier obj pour voir ce que le code est généré pour x:. Les noms

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top