简体   繁体   English

将鼠标悬停在文本块上时显示图像

[英]Show image when mouse over on textblock, wpf

Hi I had a Grid like this: 嗨,我有一个像这样的Grid

<Grid Margin="0,1,0,0" Height="35" VerticalAlignment="Top" HorizontalAlignment="Left" Width="158">
    <Grid x:Name="MainGrid" Height="35" Background="#00FFFFFF" Margin="0,1.5,0,-1.5" d:LayoutOverrides="VerticalMargin">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="35" />
            <ColumnDefinition Width="1" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <Rectangle Fill="#FFFFFFFF" StrokeThickness="0" />
        <Image Height="35" Width="35" VerticalAlignment="Stretch" Style="{StaticResource GithHubImage}" HorizontalAlignment="Stretch" Margin="0" Source="/Images/computer.png" />

        <Rectangle Fill="#FFFFFFFF" Grid.Column="1" StrokeThickness="0" />

        <Grid x:Name="Wrapper" Visibility="Visible" Grid.Column="3">
            <Rectangle x:Name="Fill" Visibility="Collapsed" Width="12" Fill="#FFDDDDDD" HorizontalAlignment="Left" Margin="40,0,0,0" d:LayoutOverrides="Width" />
                <Grid x:Name="Arrow" Visibility="Collapsed" Margin="0,0,27,0">
                    <Image Width="10" Height="20" HorizontalAlignment="Right" RenderTransformOrigin="0.5,0.5">
                        <Image.RenderTransform>
                            <TransformGroup>
                                <RotateTransform Angle="180" />
                            </TransformGroup>
                        </Image.RenderTransform>

                        <Image.Source>
                            <DrawingImage>
                                <DrawingImage.Drawing>
                                    <GeometryDrawing Brush="{DynamicResource GitHubAccentBrush}" Geometry="M897.41,613.924L887.08,624.255 887.08,603.594 897.41,613.924z" />
                                </DrawingImage.Drawing>
                            </DrawingImage>
                        </Image.Source>
                    </Image>
              </Grid>
         </Grid>

         <TextBlock x:Name="Login" Grid.Column="3" Margin="7,0,0,0" VerticalAlignment="Center"  Text="swethapilli"  Height="25.976" />
    </Grid>
    <Rectangle Height="1" VerticalAlignment="Bottom" Fill="#FFFFFFFF" StrokeThickness="0" />
</Grid>

Now it appears like 现在看起来像 在此处输入图片说明

When the MouseOver on the Image or TextBlock it should appear like this: MouseOverImageTextBlock它应该出现这样的:

在此处输入图片说明

I have so many individual grids like this in my project which contains Image and TextBlock for all the grids i need to implement the same style. 我的项目中有这么多单独的网格,其中包含ImageTextBlock ,这些网格用于实现相同样式所需的所有网格。

But i cant able to find how to make visible the arrow image (name arrow) and rectangle(name fill) to visible when the mouse over on the image(cat image) or TextBlock . 但是我无法找到当鼠标悬停在图像(猫图像)或TextBlock上时,如何使箭头图像(名称箭头)和矩形(名称填充)可见的方法。 I want to do it styles. 我想做风格。 I had already had storyboard like this. 我已经有了这样的故事板。

<Storyboard x:Key="ShowFillStoryBoard">
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Fill">
        <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
    </ObjectAnimationUsingKeyFrames>

    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Arrow">
        <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
    </ObjectAnimationUsingKeyFrames>
</Storyboard>

<Storyboard x:Key="HideFillStoryBoard">
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Fill">
        <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />

        <DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="{x:Static Visibility.Collapsed}" />
    </ObjectAnimationUsingKeyFrames>

    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Arrow">
        <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />

        <DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="{x:Static Visibility.Collapsed}" />
    </ObjectAnimationUsingKeyFrames>
</Storyboard>

But i dont know where to implement this storyboard. 但是我不知道在哪里实现这个故事板。 Can any one please help me to find the solution. 谁能帮我找到解决方案。

我个人以前没有在样式中实现情节提要,但是从其他文章中我可以肯定,您需要使用样式的<Triggers>并将Trigger for IsMouseOver设置为IsMouseOver

You can achieve this by using DataTriggers, but you have to remove Storyboard.TargetName=something in your ShowFillStoryBoard . 您可以使用DataTriggers来实现此目的,但是必须删除ShowFillStoryBoard中的Storyboard.TargetName=something

Using DataTriggers to start a Storyboard: 使用DataTriggers启动情节提要:

    <Style x:Key="MouseOverImageStyle" TargetType="Image">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsMouseOver, ElementName=textBlockName}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard x:Name="StartStoryboardBegin" Storyboard="{StaticResource ResourceKey=ShowFillStoryBoard}"></BeginStoryboard>
                </DataTrigger.EnterActions>
                <DataTrigger.ExitActions>
                    <RemoveStoryboard BeginStoryboardName="StartStoryboardBegin"></RemoveStoryboard>
                </DataTrigger.ExitActions>
            </DataTrigger>
        </Style.Triggers>
    </Style>

Apply this style on which image should be animated: Style="{DynamicResource ResourceKey=MouseOverImageStyle}" 在应为其设置动画的图像上应用以下样式: Style="{DynamicResource ResourceKey=MouseOverImageStyle}"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM