سؤال

أنا أعمل على نمط XAML لعناصر التحكم الخاصة بي. الكود أدناه هو تعيين لون stackpanel. إنه يعمل بشكل جيد ولكن هناك شيء آخر أريد القيام به. إذا تم تنشيط الزناد ، فأنا أريد ضبط لون الخط لجميع العناصر الفرعية داخل StackPanel.

في الوقت الحالي ، لا يوجد لدي سوى حواجز نصية داخل Stackpanel وأعلم أنه يمكنني بسهولة إنشاء نمط منفصل لنص TextBock. ولكن إذا تم تشغيل هذا النمط ، فسيؤثر ذلك فقط على واحدة وليس كلها. لكنني أريد تغيير جميع العناصر داخل StackPanel بمجرد أن حصلت على مشغل Mouseover للوحة.

هل هذا ممكن في XAML أم يجب أن أقوم بترميز حدث منتظم؟

<Style x:Key="XStack" TargetType="StackPanel">
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Color="White" Offset="0"/>
                <GradientStop Color="SkyBlue" Offset="6"/>                    
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <!-- Trigger-->
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True" >
            <Setter Property="Background" Value="SkyBlue"/>
        </Trigger>
    </Style.Triggers>
</Style>    
هل كانت مفيدة؟

المحلول

أضف هذا إلى الزناد الخاص بك:

<Setter Property="TextElement.Foreground" Value="Blue"></Setter>

نصائح أخرى

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

يجب أن يعمل هذا لجميع النصوص النصية ... ولكن إذا احتوت StackPanel على مربع نص ، فلن يتأثر لون النص الخاص به. يستخدم الخاصية الأمامية من فئة قاعدة التحكم ... لذا تأكد من اختبارها مع جميع أنواع العناصر الفرعية الممكنة.

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