¿Por qué el acceso a mis x Storyboard: Nombre de trabajo en Silverlight, pero no en WPF?

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

  •  22-08-2019
  •  | 
  •  

Pregunta

El siguiente código de WPF obtiene el error:. El nombre 'zipButtonOut' no existe en el contexto actual

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 he probado en un control de usuario de WPF también, pero tengo 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>

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.
        }
    }
}
¿Fue útil?

Solución

No sé por qué funciona en Silverlight, pero en los controles de WPF que se agrega a la colección de recursos no están disponibles por su x: Nombre en el código subyacente. Son accesibles a través de la colección de recursos por su x: Key, para que pueda quitar el atributo x: Nombre y añadir la siguiente línea de código justo antes de la línea en su código detrás de lo que se ha comentado, y que va a trabajar (uncomment la línea en cuestión, por supuesto):

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

Tenga en cuenta que esto requiere el uso de la siguiente declaración:

using System.Windows.Media.Animation;

Otros consejos

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top