سؤال

تحرير: كانت الفرضية الأصلية للسؤال غير صحيحة مراجعة السؤال:

في الأساس أريد أن يكون الزر مرئيا فقط عندما يكون الماوس فوق عنصر تحكم المستخدم المحتوي عليه. فيما يلي Serplied Versin لما لدي:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MyNamespace.MyUserControl"
    x:Name="myUserControl">
    <Textbox>Some Text</Textbox>
    <Button Visibility="{Binding ElementName=myUserControl, Path=IsMouseOver, Converter={StaticResource mouseOverVisibilityConverter}}" />
</UserControl>

الذي يعمل إذا كان الماوس فوق مربع النص، ولكن ليس في أي مكان آخر في عنصر تحكم المستخدم.

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

المحلول

لقد قمت بمراجعة السؤال بمجرد توجيه توماس إلى الافتراض الخاطئ في سؤالي الأصلي الذي يقودني إلى اكتشاف السبب الحقيقي لم يكن يعمل في هذا المشنور.

أساسا عنصر تحكم المستخدم لديه خلفية فارغة (على عكس شفافة) مما يبدو أنه غير مرئي للماوس، حتى مع تحديد IShittestSt المرض الصحيح، لذلك كان الحل هو إضافة الخلفية = "شفافة" للتحكم في المستخدم.

نصائح أخرى

أدركت أن UserControl لا تملك ممتلكات ISMOUSTIVER

لكنه يفعل ... يتم تعريف ISMouseover في فئة Uielement، التي يرث منها Usercontrol (بشكل غير مباشر)

يمكنك تنفيذ هذه الخاصية في فئة مشتقة. كان علي أن أفعل هذا النوع من الأشياء من قبل.

Private _IsMouseOver As Boolean = False

Protected Overrides Sub OnMouseEnter(ByVal sender As Object, ByVal e As MouseEventArgs)
     _IsMouseOver = True
     MyBase.OnMouseEnter(sender, e)
End Sub

Protected Overrides Sub OnMouseLeave(ByVal sender As Object, ByVal e As MouseEventArgs)
     _IsMouseOver = False
     MyBase.OnMouseLeave(sender, e)
End Sub

Public ReadOnly Property IsMouseOver As Boolean()
    Get
        Return _IsMouseOver
    End Get
End Property
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top