تحتاج إلى تشغيل حدث عند النقر فوق "stistboxitem" في ControlTemplate

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

سؤال

أنا أتجاوز أنماط ListBoxItems الخاصة بي مع ControlTemplate ، ولكن من خلال القيام بذلك ، فقدت المعالج لحدث ListBoxItem Click. لقد وجدت منشورًا مفيدًا في القول إنني بحاجة إلى إضافة معالج حدث في ControlTemplate ، لكنني لا أعرف كيفية القيام بذلك.

أي مساعدة وتوجيه في القيام بذلك هو موضع تقدير كبير!

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

المحلول

لا يحتوي ListBoxItem على حدث "Click" ، لذلك ليس من الواضح ما كنت تفعله أو الوظيفة التي فقدتها عند إضافة ControlTemplate.

إذا كان لديك زر في ControlTemplate الخاص بك ، فيمكنك تعيين حدث النقر بنفس الطريقة تمامًا كما تفعل خارج Contoltemplate. إليك مثالًا بسيطًا حيث لا يقوم ListBoxItem بأي شيء سوى إظهار زر بجانب المحتوى ، ويطلق هذا الزر معالج الأحداث المسمى "OnClickMebuttonclicked":

<Style TargetType="ListBoxItem">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBoxItem">
        <DockPanel>
          <Button Content="ClickMe" Click="OnClickMeButtonClicked" />
          <ContentPresenter />
        </DockPanel>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

إذا كنت تعني أنك تريد أن يعرض ListBoxItem بشكل مختلف اعتمادًا على ما إذا كان العنصر قد تم تحديده أم لا ، فما عليك سوى تعيين مشغل على Isselected:

<ControlTemplate TargetType="ListBoxItem">
  <Border Name="Bd">
    <ContentPresenter />
  </Border>

  <ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="true">
      <Setter TargetName="Bd" Property="Background" Value="Blue" />
    </Trigger>
  </ControlTemplate.Triggers>
</ControlTemplate>

نصائح أخرى

هل هو حقًا انقر فوق ماوس أنت بعد ، أم أنك تستجيب فقط للتغيير في الاختيار؟ إذا كان الأمر كذلك ، فقد ترغب في استخدام listbox.selectionChanged بدلاً من ذلك.

وإلا أعتقد أنه بسيط مثل إضافة onclick = ... في القالب ؛ سيكون المرسل هو العنصر الذي تم النقر عليه.

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