Perché l'accesso ai miei x Storyboard: Nome lavoro in Silverlight, ma non in WPF?

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

  •  22-08-2019
  •  | 
  •  

Domanda

Il seguente codice WPF ottiene l'errore:. Il nome 'zipButtonOut' non esiste nel contesto corrente

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? ho provato in un WPF UserControl pure ma 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.
        }
    }
}
È stato utile?

Soluzione

Non so perché funziona in Silverlight, ma in WPF controlli si aggiunge alla raccolta risorse non sono disponibili per la loro x: Nome in codice dietro. Sono accessibili attraverso la raccolta delle risorse per la loro x: Key, in modo da poter rimuovere l'x: attributo Name e aggiungere la seguente riga di codice appena prima della riga nel codice dietro che è commentata, e che funzionerà (decommentare la linea in questione, ovviamente):

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

Si noti che questo richiede la seguente istruzione using:

using System.Windows.Media.Animation;

Altri suggerimenti

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 generato per x:. Nomi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top