以下WPF代码收到错误:当前上下文中不存在名称“zipButtonOut”。
但是,我在此处演示的相同代码在Silverlight中有效:http://tanguay.info/web/index.php?pg=codeExamples&id=65
我需要对WPF代码做什么才能访问Window.Resources中的Storyboard?我在WPF UserControl中尝试了它,但是也遇到了同样的错误。
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>
代码隐藏:
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.
}
}
}
答案 0 :(得分:12)
我不知道为什么它在Silverlight中有效,但是在WPF控件中,添加到资源集合中的x:名称在后面的代码中是不可用的。它们可以通过它们的x:Key通过Resources集合访问,因此您可以删除x:Name属性并在代码后面的行中添加以下代码行,这些代码将被注释掉,并且它将起作用(取消注释)当然有问题的一行):
Storyboard zipButtonOut = (Storyboard)Resources["zipButtonOut"];
请注意,这需要以下using语句:
using System.Windows.Media.Animation;
答案 1 :(得分:0)
看起来VS Silverlight工具也为x:Name资源生成了一个“zipButtonOut”访问器。将来,只需查看obj文件夹中生成的文件(可能是“test1.g.cs”),看看为x:Names生成了什么代码。