Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 特定用户界面元素的EventTrigger问题_Wpf_Storyboard_Eventtrigger - Fatal编程技术网

Wpf 特定用户界面元素的EventTrigger问题

Wpf 特定用户界面元素的EventTrigger问题,wpf,storyboard,eventtrigger,Wpf,Storyboard,Eventtrigger,我在使用EventTriggers时遇到问题。我有两个按钮和两个eventtrigger,我想从这些按钮中侦听单击事件,然后这些触发器应该启动一个故事板,该故事板可以为控件的高度设置动画。 我在启动故事板方面没有问题,只是在指定EventTrigger的SourceName方面有问题: <UserControl x:Class="MyWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presen

我在使用EventTriggers时遇到问题。我有两个按钮和两个eventtrigger,我想从这些按钮中侦听单击事件,然后这些触发器应该启动一个故事板,该故事板可以为控件的高度设置动画。
我在启动故事板方面没有问题,只是在指定EventTrigger的SourceName方面有问题:

<UserControl x:Class="MyWindow"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             >

    <UserControl.Resources>
        <Storyboard x:Key="GrowPanel1">
            <DoubleAnimation To="400" Duration="0:0:0.75" Storyboard.TargetName="Panel1" Storyboard.TargetProperty="Height" />
        </Storyboard>
        <Storyboard x:Key="GrowPanel2">
            <DoubleAnimation To="400" Duration="0:0:0.75" Storyboard.TargetName="Panel2" Storyboard.TargetProperty="Height" />
        </Storyboard>
    </UserControl.Resources>

    <Grid >
        <Grid.Triggers>
            <EventTrigger RoutedEvent="Button.Click" SourceName="TriggerElement1" >
                <EventTrigger.Actions>
                    <BeginStoryboard Storyboard="{StaticResource GrowPanel1}"  />
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Button.Click"  SourceName="TriggerElement2" >
                <EventTrigger.Actions>
                    <BeginStoryboard Storyboard="{StaticResource GrowPanel2}"  />
                </EventTrigger.Actions>
            </EventTrigger>
        </Grid.Triggers>
        <Border BorderBrush="HotPink" BorderThickness="2">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>


                <ContentPresenter Panel.ZIndex="20" Grid.Column="1" >
                    <ContentPresenter.Content>
                        <StackPanel Orientation="Horizontal">
                            <Button x:Name="TriggerElement2" Background="BurlyWood"  Width="30" Height="30" VerticalAlignment="Top" />
                            <Button x:Name="TriggerElement1" Background="Chartreuse"  Width="30" Height="30" VerticalAlignment="Top" />
                        </StackPanel>
                    </ContentPresenter.Content>
                </ContentPresenter>

                <Grid Grid.Column="0" Grid.ColumnSpan="2">
                    <my1:TreeViewNav Name="Panel1" Height="0" VerticalAlignment="Top" />
                    <my:ListViewNav x:Name="Panel2" Height="0" VerticalAlignment="Top" />
                </Grid>
            </Grid>
        </Border>
    </Grid>
</UserControl>

这样,我会得到一个运行时错误:

最可能导致异常的是:“System.Windows.Markup.XamlParseException:“System.Windows.Controls.Grid”的初始化引发了异常。“行号“23”和行位置“6”。-->System.ArgumentException:找不到名为“TriggerElement1”的FrameworkElement。 位于System.Windows.FrameworkElement.FindNamedFrameworkElement(FrameworkElement startElement,字符串targetName) 位于System.Windows.EventTrigger.ProcessOneTrigger(FrameworkElement triggersHost,TriggerBase TriggerBase) 位于System.Windows.EventTrigger.ProcessTriggerCollection(FrameworkElement triggersHost) 在System.Windows.FrameworkElement.TryFireInitialized()处 在System.Windows.FrameworkElement.EndInit()处 位于MS.Internal.Xaml.Runtime.ClrObjectRuntime.InitializationGuard(XamlType XamlType、对象obj、布尔begin) ---内部异常堆栈跟踪结束--

删除EventTrigger SourceName属性可以修复错误,但我需要根据单击的按钮启动不同的故事板。据我所知,我需要使用SourceName

为什么WPF找不到名为
TriggerElement1
的按钮?我认为RoutedEvents会在视觉树上冒泡,所以只要触发器处于足够高的级别,它就应该没有命名问题?找到故事板没有问题。目标名为Panel1。我是否采取了正确的方法来获得两个按钮来触发不同的故事板?

因为您的按钮“TriggerElement1”位于ContentPresenter应用程序中,无法在初始化时找到该按钮。因为contentpresentor内容将在运行时呈现

我对您的代码做了一些更改,现在运行良好。。。希望这能解决你的问题

<UserControl x:Class="WpfApplication1.MyWindow"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008">

    <UserControl.Resources>
        <Storyboard x:Key="GrowPanel1">
            <DoubleAnimation To="400" Duration="0:0:0.75" Storyboard.TargetName="Panel1" Storyboard.TargetProperty="Height" />
            <DoubleAnimation To="0" Duration="0:0:0.75" Storyboard.TargetName="Panel2" Storyboard.TargetProperty="Height" />
        </Storyboard>
        <Storyboard x:Key="GrowPanel2">
            <DoubleAnimation To="400" Duration="0:0:0.75" Storyboard.TargetName="Panel2" Storyboard.TargetProperty="Height" />
            <DoubleAnimation To="0" Duration="0:0:0.75" Storyboard.TargetName="Panel1" Storyboard.TargetProperty="Height" />
        </Storyboard>
    </UserControl.Resources>
    <Grid>
        <Border BorderBrush="HotPink" BorderThickness="2">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>

                <StackPanel Orientation="Horizontal" Grid.Column="1" >
                    <Button x:Name="TriggerElement2" Background="BurlyWood"  Width="30" Height="30" VerticalAlignment="Top">
                        <Button.Triggers>
                            <EventTrigger RoutedEvent="Button.Click">
                                <EventTrigger.Actions>
                                    <BeginStoryboard Storyboard="{StaticResource GrowPanel2}"  />
                                </EventTrigger.Actions>
                            </EventTrigger>
                        </Button.Triggers>
                    </Button>
                    <Button x:Name="TriggerElement1" Background="Chartreuse"  Width="30" Height="30" VerticalAlignment="Top" >
                        <Button.Triggers>
                            <EventTrigger RoutedEvent="Button.Click">
                                <EventTrigger.Actions>
                                    <BeginStoryboard Storyboard="{StaticResource GrowPanel1}"  />
                                </EventTrigger.Actions>
                            </EventTrigger>
                        </Button.Triggers>
                    </Button>
                </StackPanel>

                <Grid Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Bottom">
                    <Grid Name="Panel1" Height="0" VerticalAlignment="Top" Background="Red"/>
                    <Grid x:Name="Panel2" Height="0" VerticalAlignment="Top" Background="Blue"/>
                </Grid>
            </Grid>
        </Border>
    </Grid>
</UserControl>

非常好,谢谢!我从来没有意识到这一点。