تحتاج إلى تشغيل حدث عند النقر فوق "stistboxitem" في ControlTemplate
-
28-09-2019 - |
سؤال
أنا أتجاوز أنماط 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 = ... في القالب ؛ سيكون المرسل هو العنصر الذي تم النقر عليه.