2008-08-26 10 views
7

के साथ WPF Listbox शैली मेरे पास एक सूची बॉक्स है जिसमें ListBoxItems के लिए परिभाषित शैली है। इस शैली के अंदर, मेरे पास कुछ लेबल और एक बटन है। वह बटन, मैं एक क्लिक ईवेंट को परिभाषित करना चाहता हूं जिसे मेरे पृष्ठ पर नियंत्रित किया जा सकता है (या उस शैली का उपयोग करने वाले किसी भी पृष्ठ)। मैं अपनी सूची बॉक्स Items शैली से ईवेंट को संभालने के लिए अपने WPF पृष्ठ पर एक ईवेंट हैंडलर कैसे बना सकता हूं?एक बटन

<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> 

धन्यवाद:

यहाँ मेरी शैली (केवल प्रभावित कोड) है!

उत्तर

10

RoutedCommand पर एक नज़र डालें।

कहीं MyClass में अपने आदेश को परिभाषित करें इस प्रकार है:

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

आप अतिरिक्त जानकारी के लिए CommandParameter उपयोग कर सकते हैं ..

अब पिछले:

public static readonly RoutedCommand Login = new RoutedCommand(); 

अब इस आदेश के साथ अपने बटन को परिभाषित लेकिन कम से कम, अपने आदेश को सुनना शुरू करें:

वर्ग आप कुछ अच्छा सामान करना चाहते हैं के निर्माता में, आप जगह:

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! 
    } 

आप अपने दृश्य पेड़ में हर जगह इस आदेश को सुनना शुरू कर सकते हैं!

आशा इस

पुनश्च तुम भी एक CanExecute प्रतिनिधि जो भी अपने आदेश को निष्क्रिय कर देगा साथ CommandBinding परिभाषित कर सकते हैं, तो CanExecute का कहना है में मदद करता है तो :)

पी पी एस यहाँ एक और उदाहरण है: RoutedCommands in WPF

+0

धन्यवाद बहुत आर्कटूरस, यही वही है जो मैं करना चाहता था और यह आसान था! – ScottG

0

आप सूची बॉक्स को घर पर रखने के लिए उपयोगकर्ता नियंत्रण (.ascx) बना सकते हैं। फिर पेज के लिए एक सार्वजनिक घटना जोड़ें।

Public Event btnRemove() 

फिर usercontrol

RaiseEvent btnRemove() 

में बटन क्लिक करें घटना पर आप, साथ ही किसी भी अन्य विधि की तरह घटना के माध्यम से वस्तुओं पारित कर सकते हैं। इससे आपके उपयोगकर्ता को आपके पृष्ठ को यह बताने की अनुमति मिल जाएगी कि क्या हटाना है।

6

आर्कटुरस के रूप में पोस्ट किया गया, RoutedCommands इसे प्राप्त करने का एक शानदार तरीका है।हालांकि, वहाँ अपने DataTemplate में केवल एक बटन है, तो फिर इस थोड़ा आसान हो सकता है:

तुम वास्तव में, मेजबान ListBox से किसी भी बटन के समारोह के लिए क्लिक करें संभाल कर सकते हैं इस तरह:

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

किसी भी भीतर निहित बटन जब सूची पर क्लिक किया जाता है तो सूची बॉक्स उस घटना को आग लगा देगा। इवेंट हैंडलर के भीतर से आप उस बटन पर संदर्भ प्राप्त करने के लिए e.OriginalSource का उपयोग कर सकते हैं जिस पर क्लिक किया गया था।

स्पष्ट रूप से यह बहुत सरल है यदि आपकी ListBoxItems में एक से अधिक बटन हैं, लेकिन कई मामलों में यह ठीक काम करता है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^