Question

J'ai une grille WPF qui contient, entre autres, un bouton.

Le bouton est masqué par défaut, et ne doit devenir visible lorsque la souris est sur la grille. (Fonctionnellement, la grille est un en-tête de l'onglet, et le bouton « disparaissant » est un bouton de fermeture). Je récrit aussi le modèle de bouton pour avoir un sentiment personnalisé.

Maintenant, le bouton devient visible lorsque ma souris entre dans la grille, mais disparaît dès que la souris entre le bouton. Mon intuition est que IsMouseOver de la grille devient False quand la souris se déplace sur le bouton. Y at-il un moyen de contourner cela?

       <ControlTemplate x:Key="CloseTabButtonTemplate">
            <Border Width="14" Height="14" Margin="3"
                    HorizontalAlignment="Right"
                    VerticalAlignment="Center"

                    BorderThickness="1"
                    CornerRadius="2,2,2,2">
                <TextBlock Text="x" VerticalAlignment="Center" HorizontalAlignment="Center"
                           FontSize="11" Padding="0" Margin="0,-2,0,0" Foreground="White"/>
                <Border.Style>

                    <Style TargetType="{x:Type Border}">
                        <Setter Property="Background" Value="#33DA3030"/>
                        <Setter Property="BorderBrush" Value="White"/>
                        <Setter Property="Visibility" Value="Hidden"/>
                        <Style.Triggers>                                
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid}},Path=IsMouseOver}" Value="True">
                                <Setter Property="Visibility" Value="Visible" />
                            </DataTrigger>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" Value="#FFDA3030"/>
                                <Setter Property="Visibility" Value="Visible" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
            </Border>
        </ControlTemplate>          

<Button Grid.Column="2" HorizontalAlignment="Right" Template="{StaticResource CloseTabButtonTemplate}">x</Button>

Merci!

Était-ce utile?

La solution

Je ne vois pas de problème ici. Je l'ai testé avec une fenêtre simple avec une grille:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"
        >

    <Window.Resources>

        <ControlTemplate x:Key="CloseTabButtonTemplate">
            .... Your template as in the question ....
        </ControlTemplate>

    </Window.Resources>

    <Grid x:Name="MainGrid" Width="200" Height="200" Background="Transparent">

        <Button Template="{StaticResource CloseTabButtonTemplate}" />

    </Grid>
</Window>

Peut-être la grille mère manque une couleur Background? Comme vous le voyez, je l'ai fait mon Grid Transparent. Quand je l'enlève, il ne sera pas affiché sur le bouton.

Peut-être ajouter un code peu plus?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top