Ответы пользователя по тегу WPF
  • Как сделать запуск анимации по событию WPF?

    korobok
    @korobok
    Специалист по машинному обучению (Python)
    Самый простой способ - это вынести анимацию в ресурс. К сожалению, MouseLeftButtonUp обрабатывается самим TexBox'ом поэтому пользоваться им не получится. Можно использовать PreviewMouseLeftButtonDown.
    <Window.Resources>
            <PathGeometry x:Key="pathUsernameRU">
                <PathFigure StartPoint="0,45">
                    <PolyLineSegment Points="0,10"></PolyLineSegment>
                </PathFigure>
            </PathGeometry>
            <PathGeometry x:Key="pathUsernameEN">
                <PathFigure StartPoint="0,45">
                    <PolyLineSegment Points="0,70"></PolyLineSegment>
                </PathFigure>
            </PathGeometry>
            <Storyboard x:Key="Storyboard">
            	<DoubleAnimation Storyboard.TargetName="textBlock1" Storyboard.TargetProperty="Opacity" 
    				From="0" To="1"  Duration="0:0:0.2"></DoubleAnimation>
    			<DoubleAnimationUsingPath Storyboard.TargetName="textBlock1" Storyboard.TargetProperty="(Canvas.Top)" 
    				PathGeometry="{StaticResource pathUsernameEN}" Duration="0:0:0.2" Source="Y"/>
            	<DoubleAnimation Storyboard.TargetName="textBlock" Storyboard.TargetProperty="Opacity" From="0" To="1" 
    				Duration="0:0:0.2" />
                <DoubleAnimationUsingPath Storyboard.TargetName="textBlock" Storyboard.TargetProperty="(Canvas.Top)" 
    				PathGeometry="{StaticResource pathUsernameRU}" Duration="0:0:0.2" Source="Y"/>
            </Storyboard>
        </Window.Resources>
        <Grid Width="300" Height="100">
            <Canvas>
                <TextBox x:Name="textBox" Canvas.Top="35" Height="30" Width="300" BorderThickness="0">
    				<TextBox.Triggers>
    					<EventTrigger RoutedEvent="PreviewMouseLeftButtonDown">
    							<BeginStoryboard Storyboard="{StaticResource Storyboard}"/>	
    					</EventTrigger>
    				</TextBox.Triggers>
    			</TextBox>
                <Rectangle Canvas.Top="60" Fill="Black" Width="300" Height="2"></Rectangle>
                <TextBlock x:Name="textBlock" Text="Username" Canvas.Top="45" Foreground="#7BBFD3" Opacity="0"/>
                <TextBlock x:Name="textBlock1" Text="Имя пользователя" Canvas.Top="45" Foreground="#7BBFD3" Opacity="0"/>
    
            </Canvas>
        </Grid>

    После этого появляется веселый эффект, когда при нажатии каждый раз вылезает подсказка. Можно от этого избавиться немного поменяв анимацию и убрав From
    <Storyboard x:Key="Storyboard">
            	<DoubleAnimation Storyboard.TargetName="textBlock1" Storyboard.TargetProperty="Opacity" 
    				 				To="1"  Duration="0:0:0.2"/>
            	<DoubleAnimation Storyboard.TargetName="textBlock" Storyboard.TargetProperty="Opacity"  
    								To="1" Duration="0:0:0.2" />
            	<DoubleAnimation Storyboard.TargetProperty="(Canvas.Top)" 
    								Storyboard.TargetName="textBlock" Duration="0:0:0.2" To="70"/>
            	<DoubleAnimation Storyboard.TargetProperty="(Canvas.Top)" 
    								Storyboard.TargetName="textBlock1" Duration="0:0:0.2" To="20"/>
    </Storyboard>

    Но чаще всего для подсказок используют ToolTip.
    Ответ написан
    1 комментарий