मैं सूची को संभालने की आवश्यकता के बिना इसे हल करना चाहता था, कोड कोड के पीछे बॉक्स क्लिक करें, और मैं सूचीबॉक्स ओवरम शैली को ओवरराइड नहीं करना चाहता था (या शैली को पहले स्थान पर ओवरराइड करने के लिए परिभाषित करना चाहता हूं)। जब सूची बॉक्स को डबलक्लिक किया गया था तो मैं सिर्फ एक आदेश को आग लगाना चाहता था।
मैं एक संलग्न संपत्ति बनाई तरह तो (कोड बहुत विशिष्ट है, लेकिन आप इसे सामान्यीकरण कर सकते हैं के रूप में आवश्यक):
public class ControlItemDoubleClick : DependencyObject {
public ControlItemDoubleClick()
{
}
public static readonly DependencyProperty ItemsDoubleClickProperty =
DependencyProperty.RegisterAttached("ItemsDoubleClick",
typeof(bool), typeof(Binding));
public static void SetItemsDoubleClick(ItemsControl element, bool value)
{
element.SetValue(ItemsDoubleClickProperty, value);
if (value)
{
element.PreviewMouseDoubleClick += new MouseButtonEventHandler(element_PreviewMouseDoubleClick);
}
}
static void element_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ItemsControl control = sender as ItemsControl;
foreach (InputBinding b in control.InputBindings)
{
if (!(b is MouseBinding))
{
continue;
}
if (b.Gesture != null
&& b.Gesture is MouseGesture
&& ((MouseGesture)b.Gesture).MouseAction == MouseAction.LeftDoubleClick
&& b.Command.CanExecute(null))
{
b.Command.Execute(null);
e.Handled = true;
}
}
}
public static bool GetItemsDoubleClick(ItemsControl element)
{
return (bool)element.GetValue(ItemsDoubleClickProperty);
}
}
मैं तो संलग्न संपत्ति के साथ मेरी ListBox घोषित करने और मेरी लक्ष्य कमांड:
<ListBox ItemsSource="{Binding SomeItems}"
myStuff:ControlItemDoubleClick.ItemsDoubleClick="true">
<ListBox.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="MyCommand"/>
</ListBox.InputBindings>
</ListBox>
उम्मीद है कि इससे मदद मिलती है।
धन्यवाद। यह मेरी समस्या भी हल करता है। एक फॉलोअप: यह चल रहे एप्लिकेशन में बहुत अच्छा काम करता है, लेकिन यह दृश्य स्टूडियो डिजाइनर (शोस्टॉपर नहीं, बल्कि एक जलन) को खो देता है। मैं एप्लिकेशन संसाधनों में ListBoxItem शैली को स्पष्ट रूप से परिभाषित नहीं करता हूं, इसलिए आधारित समय डिज़ाइन समय पर विफल हो जाएगा। हालांकि, मेरे पास एक थीमिंग लाइब्रेरी (WPFTheme) है जो इस संसाधन को रनटाइम पर परिभाषित करती है। यदि मैं एक स्थिर संसाधन को परिभाषित करता हूं, तो यह गतिशील, थीम वाले एक को समाप्त करता है। किसी भी विचार पर मैं कैसे दोनों को एक साथ अच्छा खेल सकता हूं? – el2iot2
थोड़ा और प्रयोग करने के बाद, मैंने इसे समझ लिया ... मैंने बस मर्ज किए गए संसाधन में थीम के xaml का संदर्भ दिया: –
el2iot2
यह बहुत अच्छा है लेकिन क्या होगा यदि आपने पहले से ही ResourceDictionary में ItemContainerStyle को परिभाषित किया है? – Oliver