के भीतर इनपुट बाइंडिंग को परिभाषित करना मैं एमवीवीएम डिज़ाइन पैटर्न का उपयोग करके एक WPF ऐप बना रहा हूं, और मैं टैबइटम नियंत्रण को विस्तारित करने का प्रयास कर रहा हूं ताकि जब उपयोगकर्ता मध्य माउस बटन पर क्लिक करता है तो वह टैब बंद कर देता है। मैं इनपुट बाइंडिंग का उपयोग करके इसे प्राप्त करने की कोशिश कर रहा हूं, और जब तक मैं इसे शैली में परिभाषित करने की कोशिश नहीं करता तब तक यह बहुत अच्छा काम करता है। मैंने सीखा है कि आप इनपुट बाइंडिंग को शैली में तब तक नहीं जोड़ सकते जब तक आप इसे निर्भरता प्रॉपर्टी का उपयोग करके संलग्न नहीं करते। तो मैंने इस समान पोस्ट here... का पालन किया और यह लगभग ... काम करता है। मैं मध्य माउस बटन का उपयोग करके एक टैब बंद कर सकता हूं, लेकिन यह किसी अन्य टैब पर काम नहीं करेगा (सभी टैब रनटाइम पर जोड़े जाते हैं और उसी शैली का उत्तराधिकारी होते हैं)।स्टाइल
तो मुझे कुछ मदद चाहिए। यह केवल पहली बार क्यों काम करेगा, और बाद में नहीं? जाहिर है, मैं एक कस्टम नियंत्रण बना सकता हूं जो टैबिटेम से विरासत में आता है और इसे काम करता है, लेकिन मैं इसे समझना चाहता हूं क्योंकि मैं इसे अपनी परियोजनाओं में विस्तारित कर सकता हूं। मैं निर्भरता प्रॉपर्टीज पर कोई विशेषज्ञ नहीं हूं, इसलिए कृपया मेरी मदद करें। धन्यवाद!
शैली:
<Style TargetType="{x:Type TabItem}">
<Setter Property="w:Attach.InputBindings">
<Setter.Value>
<InputBindingCollection>
<MouseBinding MouseAction="MiddleClick"
Command="{Binding CloseCommand}"/>
</InputBindingCollection>
</Setter.Value>
</Setter>
...
</Style>
कक्षा
public class Attach
{
public static readonly DependencyProperty InputBindingsProperty =
DependencyProperty.RegisterAttached("InputBindings", typeof(InputBindingCollection), typeof(Attach),
new FrameworkPropertyMetadata(new InputBindingCollection(),
(sender, e) =>
{
var element = sender as UIElement;
if (element == null) return;
element.InputBindings.Clear();
element.InputBindings.AddRange((InputBindingCollection)e.NewValue);
}));
public static InputBindingCollection GetInputBindings(UIElement element)
{
return (InputBindingCollection)element.GetValue(InputBindingsProperty);
}
public static void SetInputBindings(UIElement element, InputBindingCollection inputBindings)
{
element.SetValue(InputBindingsProperty, inputBindings);
}
}
मैंने डैनियल द्वारा सुझाए गए कोड के साथ ऊपर वर्णित सटीक समस्या में भाग लिया है। ऐसा लगता है कि अटैच क्लास का उपयोग करते समय विशेष रूप से शैली में कुछ अजीब बात है। मैंने पाया कि डेटाकॉन्टेक्स्ट शून्य "कभी-कभी" था जब इनपुट बाइंडिंग जोड़े गए थे, इसलिए बाध्यकारी होने पर यह आदेशों का पता नहीं लगा सका। मुझे कभी समाधान नहीं मिला लेकिन मैंने नीचे दिए गए जवाब में बाइंडिंग को डुप्लिकेट कर दिया। – Asheh