كيفية تجاوز النمط العالمي (لا يحتوي على مفتاح X:)، أو قم بتطبيق نمط مسمى بالكامل لجميع عناصر التحكم المستهدفة بالنوع؟

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

سؤال

أعلنت أن أسلوبا أريد التقدم بطلبه على جميع الأزرار الموجودة في المشروع، ويقيم النمط في ResourceTionary:

<Style TargetType="StackPanel">
    <Setter Property="Orientation" Value="Horizontal" />
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
</Style>

الآن، في بعض النافذة، أريد أن يرث من هذا النمط ولكن أضف قيمة:

<Style TargetType="StackPanel"> 
    <Setter Property="Margin" Value="5"/>
</Style>

المشكلة هي أنه لا يرث من النمط العالمي، من أجل الورث علي تعيين مفتاح على النمط العالمي:

<Style TargetType="StackPanel" x:Key="StackPanelStyle" />

ثم في Water's Xaml Worherit (أو / وتجاوز - اختياري):

<Style TargetType="StackPanel" BasedOn="StackPanelStyle" />

المشكلة هي أنه إذا قمت بتعيين مفتاح، فهذا ليس عالميا وعليك الاتصال به في كل نافذة / نطاق.

يجب أن يكون الحل لسؤالي واحدا من الاثنين (هل هناك أي شيء آخر أفتقده؟):

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

فكرت في إعادة تزيين الأساليب بالقرب من الأساليب المسماة (في Roadvisionaryary) التي تعمل بالفعل:

<!--In the ResourceDictionary-->
<Style x:Key="StackPanelStyle" TargetType="StackPanel">
    <Setter Property="Orientation" Value="Horizontal" />
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
<!--In the app.xaml-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/>
<!--In the window/page scope-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/

لكنني أبحث عن أشياء أفضل من RedeClare بغباء جميع الأساليب.

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

المحلول

جرب هذا:

<Style TargetType="{x:Type StackPanel}" BasedOn="{StaticResource {x:Type StackPanel}}">
  <!-- ... -->
</Style>

لقد أعلنت أن أساليب القاعدة الخاصة بي في applistionary في app.xaml، إذا تجاوزتها في نافذة محددة مثل هذا، وعادة ما يعمل.

نصائح أخرى

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

<Style
    x:Key="upDownBaseStyle"
    TargetType="{x:Type Control}">
    <Setter
      Property="Margin"
      Value="2" />
    <Setter
      Property="HorizontalAlignment"
      Value="Stretch" />
    <Setter
      Property="VerticalAlignment"
      Value="Center" />
  </Style>

  <Style
    TargetType="{x:Type xceed:IntegerUpDown}"
    BasedOn="{StaticResource upDownBaseStyle}">
  </Style>

  <Style
    TargetType="{x:Type xceed:DoubleUpDown}"
    BasedOn="{StaticResource upDownBaseStyle}">
  </Style>

الآن يتم تطبيق أنماطين الأخيرة على جميع عناصر تحكم IntegerUpdown و DoubleUpdown داخل تطبيقك دون أي ذكر لمفتاح.

لذلك القاعدة الأساسية: يجب أن يكون لدى النمط الأساسي المفتاح للإشارة إليها، وقد لا يمكن تطبيق الأساليب المشتقة وبالتالي يمكن تطبيقها دون أي مفاتيح - فقط عن طريق الأنواع المستهدفة.

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

إذا لم تقم بإنشاء عنصر تحكم مستخدم، فهي سهلة التنفيذ.

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