当鼠标位于父控件上时,如何显示带有3个按钮的StackPanel?

时间:2013-12-04 14:57:34

标签: wpf xaml

下面的XAML有一个Rectangle和一个带3个按钮的StackPanel。当鼠标指针移过MyRect矩形时,它显示StackPanel。

但是当鼠标指针移到StackPanel内的一个Button控件上时,它会像疯了一样闪烁。这是因为鼠标指针不再位于MyRect矩形上方。因此它将StackPanel可见性设置为折叠。这会导致鼠标指针再次超过MyRect Rectangle,这会导致StackPanel可见性被折叠。这种情况持续不断地导致闪烁。

我需要做些什么来显示StackPanel并允许用户将鼠标指针移动到StackPanel的按钮(和/或任何内容)上而不会闪烁?

我希望在XAML中完成所有工作。 (请不要使用代码)。

<Grid Margin="50">
    <Grid.RowDefinitions>
        <RowDefinition Height="50" />
        <RowDefinition Height="100" />
    </Grid.RowDefinitions>

    <Rectangle x:Name="MyRect"
               Fill="Yellow"
               Grid.RowSpan="2"/>

    <StackPanel Orientation="Horizontal">
        <StackPanel.Style>
            <Style>
                <Setter Property="StackPanel.Visibility" Value="Collapsed"></Setter>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=MyRect, Path=IsMouseOver}" Value="true">
                        <Setter Property="StackPanel.Visibility" Value="Visible"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </StackPanel.Style>

        <Button Margin="10" Width="65">One</Button>
        <Button Margin="10" Width="65">Two</Button>
        <Button Margin="10" Width="65">Three</Button>
    </StackPanel>

</Grid>

1 个答案:

答案 0 :(得分:2)

不是与IsMouseOver矩形绑定,而是绑定IsMouseOver Grid True,当您将鼠标悬停在矩形或按钮上时,它将始终为<Grid x:Name="grid"> .... <Style.Triggers> <DataTrigger Binding="{Binding ElementName=grid, Path=IsMouseOver}" Value="true"> <Setter Property="StackPanel.Visibility" Value="Visible"></Setter> </DataTrigger> </Style.Triggers> .... </Grid>

{{1}}