سؤال

لدي مربع القائمة التي لديه أسلوب تعريف ListBoxItems.داخل هذا النمط ، لدي بعض التسميات على زر.واحد زر, أريد تعريف الحدث click التي يمكن التعامل معها على صفحتي (أو أي صفحة التي تستخدم هذا النمط).كيف يمكنني إنشاء معالج الحدث على WPF الصفحة للتعامل مع هذا الحدث من ListBoxItems النمط ؟

هنا هو بلدي نمط (المتضررة رمز فقط):

<Style x:Key="UsersTimeOffList"  TargetType="{x:Type ListBoxItem}">
... 
<Grid>
<Button x:Name="btnRemove" Content="Remove" Margin="0,10,40,0" Click="btnRemove_Click" />
</Grid>
</Style>

وذلك بفضل!

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

المحلول

نلقي نظرة على RoutedCommands.

تعريف القيادة الخاصة بك في myclass في مكان ما على النحو التالي:

    public static readonly RoutedCommand Login = new RoutedCommand();

الآن تحديد الزر الخاص بك مع هذا الأمر:

    <Button Command="{x:Static myclass.Login}"  />  

يمكنك استخدام CommandParameter للحصول على معلومات إضافية..

الآن أخيرا وليس آخرا ، بدء الاستماع إلى الأوامر الخاص بك:

في منشئ الفئة التي ترغب في القيام ببعض الأشياء الجميلة كنت مكان:

    CommandBindings.Add(new CommandBinding(myclass.Login, ExecuteLogin));

أو في XAML:

   <UserControl.CommandBindings>
        <CommandBinding Command="{x:Static myclass.Login}" Executed="ExecuteLogin" />
   </UserControl.CommandBindings>

و تنفيذ تفويض CommandBinding الاحتياجات:

    private void ExecuteLogin(object sender, ExecutedRoutedEventArgs e)
    {
          //Your code goes here... e has your parameter!
    }

يمكنك البدء في الاستماع إلى هذا الأمر في كل مكان في visual شجرة!

ويساعد هذا الأمل

ملاحظة يمكنك أيضا تحديد CommandBinding مع CanExecute مندوب والتي سوف حتى تعطيل الأوامر الخاص بك إذا كان CanExecute يقول ذلك :)

PPS هنا هو مثال آخر: RoutedCommands في WPF

نصائح أخرى

كما السماك الرامح نشر RoutedCommands هي طريقة رائعة لتحقيق ذلك.ومع ذلك ، إذا كان هناك فقط زر واحد في DataTemplate ثم هذا قد يكون قليلا أكثر بساطة:

يمكنك التعامل مع الواقع أي زر انقر فوق الحدث من المضيف ListBox, مثل هذا:

<ListBox Button.Click="removeButtonClick" ... />

أي الأزرار الموجودة داخل ListBox سوف الحريق الذي حدث عندما كنت النقر على.من داخل معالج الحدث يمكنك استخدام هـ.OriginalSource للحصول على مرجع إلى الزر الذي تم النقر على.

ومن الواضح أن هذا هو غاية في التبسيط إذا ListBoxItems أكثر من زر واحد ، ولكن في كثير من الحالات فإنه يعمل على ما يرام.

يمكنك إنشاء عنصر تحكم مستخدم (.ascx) إلى منزل listbox.ثم يضاف الحدث العام للصفحة.

Public Event btnRemove()

ثم على زر انقر فوق الحدث في usercontrol

RaiseEvent btnRemove()

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

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