WPF - 当鼠标悬停在另一个元素上时隐藏元素

3

在一个网格中有一些元素,我想要的是当鼠标悬停在一个矩形上时显示/隐藏按钮。

最初的回答:

<UserControl ...>
    <Grid>
        <Rectangle ...>
        <Button ...>
    </Grid>
</UserControl>

我尝试了几个触发器,但迄今为止都没有成功。请帮忙。原始答案翻译成"最初的回答"。
1个回答

4
这是你需要的内容: 一个绑定到应该触发隐藏的控件的数据触发器。 或者你可以使用一个转换器,比如BoolenToInvisibilityConverter PS:如果你想要反转逻辑,你需要在样式中设置可见性,否则它会被覆盖。
            <StackPanel>
                <Rectangle Fill="Red" Height="20" Width="29" Name="MyRect"/>
                <Button>
                    <Button.Style>
                        <Style TargetType="Button">
                        <!--<Setter Property="Visibility" Value="Hidden"/>-->
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding ElementName=MyRect, Path=IsMouseOver}" Value="True">
                                    <Setter Property="Visibility" Value="Hidden" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Button.Style>                    
                </Button>
            </StackPanel>

在WPF中,触发器的使用有时会让人感到困惑,但不用担心,你会学会适应它的!


它的作用是相反的 - 当鼠标悬停在按钮上时,矩形变为不可见状态。但是当鼠标悬停在矩形上时,它应该显示/隐藏按钮 :) - phantasm
谢谢,但它有与 Mathivanan 版本相同的问题。 - phantasm
我再次进行了编辑,请查看被注释掉的那一行,将其取消注释并将“Setter”从“Hidden”更改为“Visible”。 - Denis Schaf
1
您正在创建一个样式。在XAML中,样式总是可以被覆盖。想象一下,您创建了一个按钮样式,使所有按钮变为红色。如果您将一个按钮定义为蓝色,它仍将是蓝色,因为您已经重写了它的颜色。这正是直接在元素上设置可见性时发生的事情。它会覆盖您的样式,因此参数还需要在样式中设置(参见答案->评论)。 - Denis Schaf
谢谢解释和更新 :) 运行得非常好! - phantasm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接