1

我制作了一个用户控件,当用户用鼠标进入这个控件时,我想隐藏某个面板,并将其替换为另一个。

我也想要一个 SlideIn 过渡,但我无法让它正常工作。

代码:

<UserControl x:Name="UserControl">

<UserControl.Resources>

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseEnter">
            <ei:GoToStateAction TargetObject="{Binding ElementName=UserControl}" StateName="UsercontrolMouseEnter"/>
        </i:EventTrigger>
        <i:EventTrigger EventName="MouseLeave">
            <ei:GoToStateAction TargetObject="{Binding ElementName=UserControl}" StateName="UsercontrolMouseLeave"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

    <UserControl.Background>
        <StaticResource ResourceKey="DarkGrey"/>
    </UserControl.Background>

    <Grid x:Name="LayoutRoot" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Transparent">

        <VisualStateManager.CustomVisualStateManager>
            <ei:ExtendedVisualStateManager/>
        </VisualStateManager.CustomVisualStateManager> 

        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="UsercontrolVisualStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0:0:0.5" To="UsercontrolMouseEnter">
                        <ei:ExtendedVisualStateManager.TransitionEffect>
                            <ee:SlideInTransitionEffect/>
                        </ei:ExtendedVisualStateManager.TransitionEffect>
                    </VisualTransition>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="UsercontrolMouseEnter">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="UserStatusPanel">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
                        </ObjectAnimationUsingKeyFrames>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="UserActionsPanel">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="UsercontrolMouseLeave"/>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="30"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="50"/>
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <Grid x:Name="UserCallAlarmPanel" Grid.Column="0" Grid.RowSpan="2" 
        Background="{Binding CallStatus, Converter={StaticResource CallStatusBackgroundConverter}}" >
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <WrapPanel x:Name="ExtraCallPanel" Grid.Row="0" Style="{StaticResource SelectedAction}" VerticalAlignment="Center"
            Visibility="{Binding HasCalls, Converter={StaticResource BoolToVis}}" >
            <WrapPanel Background="Transparent" >
                <Viewbox StretchDirection="DownOnly" Stretch="Uniform" >
                    <ContentControl Content="{DynamicResource calls_icon}"/>
                </Viewbox>
            </WrapPanel>
        </WrapPanel>

         <WrapPanel x:Name="ExtraAlarmPanel" Grid.Row="1" Style="{StaticResource SelectedAction}" VerticalAlignment="Center"
            Visibility="{Binding HasCalls, Converter={StaticResource BoolToVis}}" >
            <WrapPanel Background="Transparent" >
                <Viewbox StretchDirection="DownOnly" Stretch="Uniform" >
                    <ContentControl Content="{DynamicResource alarm_icon}"/>
                </Viewbox>
            </WrapPanel>
        </WrapPanel>
    </Grid>

    <Border BorderBrush="{x:Null}" Margin="10,0,0,0" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Center">
        <TextBlock x:Name="UserNameLabel" TextWrapping="Wrap" Text="{Binding Name}" Margin="0,5,0,0" 
            FontSize="16" VerticalAlignment="Center" Style="{StaticResource WhiteSegoeText}" />
    </Border>

    <Border x:Name="UserStatusPanel" BorderBrush="{x:Null}" Margin="10,0,0,0" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Center">
        <TextBlock x:Name="UserStatusLabel" TextWrapping="Wrap" Text="{Binding UserStatus}" 
            FontSize="13" VerticalAlignment="Center" Style="{StaticResource WhiteSegoeText}"  />
    </Border>

    <WrapPanel x:Name="UserStatusIconPanel" Grid.Column="2" Grid.RowSpan="2" Height="50" Width="50" MouseLeftButtonDown="StatusIconContainer_MouseLeftButtonDown" Style="{StaticResource SelectedAction}" 
               Visibility="{Binding Status, Converter={StaticResource StatusVisibilityConverter}}" >
        <Viewbox StretchDirection="DownOnly" Stretch="Uniform">
            <Image x:Name="UserStatusIcon" Source="{Binding Status, Converter={StaticResource StatusIconConverter}}" />
        </Viewbox>
    </WrapPanel>

    <Grid x:Name="UserActionsPanel" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" Visibility="Collapsed" >
        <Grid.Resources>
            <Style TargetType="{x:Type WrapPanel}" BasedOn="{StaticResource SelectedAction}">
                <Setter Property="Margin" Value="5,0,5,0" />
            </Style> 
        </Grid.Resources>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <WrapPanel x:Name="MessageActionPanel" Grid.Column="0" MouseLeftButtonDown="Iconpanel1_MouseLeftButtonDown">
            <Viewbox StretchDirection="DownOnly" Stretch="Uniform" >
                <ContentControl x:Name="MessageAction" Content="{StaticResource action_message}" />
            </Viewbox>
        </WrapPanel>

        <WrapPanel x:Name="ChatActionPanel" Grid.Column="1" MouseLeftButtonDown="Iconpanel2_MouseLeftButtonDown">
            <Viewbox StretchDirection="DownOnly" Stretch="Uniform" >
                <ContentControl x:Name="ChatAction" Content="{StaticResource action_chat}" />
            </Viewbox>
        </WrapPanel>

        <WrapPanel x:Name="CallActionPanel" Grid.Column="2" MouseLeftButtonDown="Iconpanel3_MouseLeftButtonDown">
            <Viewbox StretchDirection="DownOnly" Stretch="Uniform" >
                <ContentControl x:Name="CallAction" Content="{StaticResource action_call_icon}" />
            </Viewbox>
        </WrapPanel>

        <WrapPanel x:Name="SipCallActionPanel" Grid.Column="3" MouseLeftButtonDown="Iconpanel4_MouseLeftButtonDown">
            <Viewbox StretchDirection="DownOnly" Stretch="Uniform" >
                <ContentControl x:Name="SipCallAction" Content="{StaticResource action_sipcall_icon}" />
            </Viewbox>
        </WrapPanel>
    </Grid>
</Grid>
</UserControl>

但是这段代码在鼠标输入时将整个用户控件从左向右滑动。
我需要进行哪些更改才能使其只有 UserStatusPanel 和 UserActionsPanel 动画?

4

0 回答 0