.netwpfdatatrigger

Triggers collection members must be of type EventTrigger


I've created a UserControl, similar to the following:

<UserControl>
    <StackPanel Orientation="Vertical">
        <StackPanel x:Name="Launch" Orientation="Horizontal" Visibility="Collapsed">
            <!-- Children here -->
        </StackPanel>
        <ToggleButton x:Name="ToggleLaunch" IsChecked="False" Content="Launch"/>
    </StackPanel>
</UserControl>

I've been trying to use a DataTrigger to make the 'Launch' StackPanel become visible when the ToggleButton is checked, and remain collapsed otherwise. However, at runtime I get an error stating "Failed object initialization (ISupportInitialize.EndInit). Triggers collection members must be of type EventTrigger". I've tried adding it to the trigger collection of the UserControl and StackPanel with no success. My trigger XAML looks like the following:

<DataTrigger Binding="{Binding ElementName=ToggleLaunch, Path=IsChecked}" Value="True">
    <Setter TargetName="Launch" Property="UIElement.Visibility" Value="Visible"/>
</DataTrigger>

Solution

  • DataTriggers are meant for Style, ControlTemplate and DataTemplate per the MSDN Docs.

    Solution was to use an EventTrigger as the error message indicated. My solution was the following:

    <EventTrigger RoutedEvent="ToggleButton.Checked">
        <BeginStoryboard>
            <Storyboard>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
                                               Storyboard.TargetName="LaunchButtons">
                    <DiscreteObjectKeyFrame KeyTime="0:0:0"
                                            Value="{x:Static Visibility.Visible}" />
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
    <EventTrigger RoutedEvent="ToggleButton.Unchecked">
        <BeginStoryboard>
            <Storyboard>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
                                               Storyboard.TargetName="LaunchButtons">
                    <DiscreteObjectKeyFrame KeyTime="0:0:0"
                                            Value="{x:Static Visibility.Collapsed}" />
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </BeginStoryboard>
     </EventTrigger>