Domanda

Ho una griglia di WPF che contiene, tra le altre cose, un pulsante.

Il pulsante è nascosta per impostazione predefinita, e dovrebbe diventare visibile solo quando il mouse è sopra la griglia. (Funzionalmente, la griglia è un'intestazione scheda, e il pulsante "scomparsa" è un pulsante di chiusura). Ho anche riscritto il modello di pulsante per avere una sensazione personalizzato.

Ora, il pulsante diventa visibile quando il mio mouse entra in griglia, ma scompare non appena il mouse entra il pulsante. La mia intuizione è che IsMouseOver della griglia diventa False quando il mouse si sposta su al pulsante. C'è un modo per aggirare questo?

       <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>

Grazie!

È stato utile?

Soluzione

non vedo problemi qui. Ho provato con una semplice finestra con una griglia:

<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>

Forse la griglia genitore manca un colore Background? Come vedete ho fatto il mio Grid Transparent. Quando mi tolgo, non mostrerà il pulsante.

Forse aggiungere un codice po 'di più?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top