WPF Trigger a storyboard in a usercontrol When cli

2019-09-18 13:38发布

问题:

I am trying to develop a menu that looks like windows media center menu. So I made a usercontrol as a container which will contain menuitems (each menuitems is a usercontrol).I want to hide or display the container after a click on a button.So in click event of the button, i set to true a dependencyproperty "DisappearProperty" (located in the container). But this method doesn't work.

to disappear the container, i trigger a storyboard based on "DisappearProperty" DependencyProperty. here the code :

//The container
<UserControl x:Class="MyUserControls.WMCBorder"
         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" 
         mc:Ignorable="d" 
         Name="UC"
         d:DesignHeight="300" d:DesignWidth="300">

 <UserControl.Resources>
    <ControlTemplate x:Key="ctContainer">
        <ControlTemplate.Resources>
    <Storyboard x:Key="SBDisappear">

        <DoubleAnimation Storyboard.TargetName="borderZooming" 
                                         Storyboard.TargetProperty="ScaleX" 
                                         From="1" To="4.0" 
                                         Duration="0:0:0.1"/>
        <DoubleAnimation Storyboard.TargetName="borderZooming" 
                                         Storyboard.TargetProperty="ScaleY" 
                                         From="1" To="4.0" 
                                         Duration="0:0:0.1"/>

                <DoubleAnimation Storyboard.TargetName="container"
                                         Storyboard.TargetProperty="Opacity"
                                         From="1" 
                                         To="0" 
                                         Duration="0:0:0.1"/>


    </Storyboard>

    <Storyboard x:Key="SBDisplay">

        <DoubleAnimation Storyboard.TargetName="borderZooming" 
                                         Storyboard.TargetProperty="ScaleX" 
                                         From="4" To="1.0" 
                                         Duration="0:0:0.1"/>
        <DoubleAnimation Storyboard.TargetName="borderZooming" 
                                         Storyboard.TargetProperty="ScaleY" 
                                         From="4" To="1.0" 
                                         Duration="0:0:0.1"/>

                <DoubleAnimation Storyboard.TargetName="container"
                                         Storyboard.TargetProperty="Opacity"
                                         From="0" 
                                         To="1" 
                                         Duration="0:0:0.1"/>


    </Storyboard>

        </ControlTemplate.Resources>
        <Border x:Name="container">
            <Border.RenderTransform>
                <ScaleTransform x:Name="borderZooming" ScaleX="0.1" ScaleY="0.1"/>
                </Border.RenderTransform>
                <Grid>
        <ContentPresenter />



            </Grid>
        </Border>

            <ControlTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=DisappearProperty}" Value="true">
            <DataTrigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource SBDisappear}"/>
            </DataTrigger.EnterActions>
        </DataTrigger>

        <DataTrigger Binding="{Binding Path=DisplayProperty}" Value="True">
            <DataTrigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource SBDisplay}"/>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </ControlTemplate.Triggers>

</ControlTemplate>
</UserControl.Resources>
<Grid>

</Grid>

//Code behind of the container
 public partial class WMCBorder : UserControl
{
    public WMCBorder()
    {
        InitializeComponent();
    }



    public bool Disappear
    {
        get { return (bool)GetValue(DisappearProperty); }
        set { SetValue(DisappearProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Disappear.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty DisappearProperty =
        DependencyProperty.Register("Disappear", typeof(bool), typeof(WMCBorder), new PropertyMetadata(false));

    public bool Display
    {
        get { return (bool)GetValue(DisplayProperty); }
        set { SetValue(DisplayProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Disappear.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty DisplayProperty =
        DependencyProperty.Register("Display", typeof(bool), typeof(WMCBorder), new PropertyMetadata(false));


}

//The click event of the Hide button
  private void Button_Click(object sender, RoutedEventArgs e)
    {
        wmcb.Disappear = true;

     }

 //The click event of the Hide button
  private void Button2_Click(object sender, RoutedEventArgs e)
    {
        wmcb.Display= true;

     }

Thanks in advance.

As I received no response so far, so I simplified the question on this post