مشكلة WPF مع Visibiliy of Button عندما يسدد السلف isMouseover

StackOverflow https://stackoverflow.com/questions/4125555

  •  29-09-2019
  •  | 
  •  

سؤال

لدي شبكة WPF التي تحتوي ، من بين أشياء أخرى ، على زر.

يتم إخفاء الزر افتراضيًا ، ويجب أن يصبح مرئيًا فقط عندما يكون الماوس فوق الشبكة. (من الناحية الوظيفية ، الشبكة هي رأس علامة تبويب ، وزر "الاختفاء" هو زر إغلاق). أنا أيضا إعادة كتابة قالب الزر للحصول على شعور مخصص.

الآن ، يصبح الزر مرئيًا عندما يدخل الماوس الشبكة ، لكنه يختفي بمجرد دخول الماوس إلى الزر. حدسي هو أن Ismouseover للشبكة يصبح خطأ عندما ينتقل الماوس إلى الزر. هل هناك طريقة للتغلب على ذلك؟

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

شكرًا!

هل كانت مفيدة؟

المحلول

لا أرى أي مشاكل هنا. لقد اختبرته مع نافذة بسيطة مع شبكة:

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

ربما تكون الشبكة الوالدية مفقودة Background اللون؟ كما ترى لقد صنعت بلدي Grid Transparent. عندما أقوم بإزالته ، لن يعرض الزر.

ربما أضف المزيد من التعليمات البرمجية؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top