मेरे डब्ल्यूपीएफ एप्लिकेशन में मैं एक कमांड में एक इनपुट इशारा संलग्न करना चाहता हूं ताकि इनपुट इशारा मुख्य विंडो में विश्व स्तर पर उपलब्ध हो, चाहे कोई नियंत्रण किस पर केंद्रित हो।डब्ल्यूपीएफ: एक कुंजी इशारा चोरी करने से नियंत्रण को कैसे रोकें?
मेरे मामले में मैं Key.PageDown
को एक कमांड में बांधना चाहता हूं, हालांकि, जैसे ही कुछ नियंत्रण फोकस प्राप्त करते हैं (जैसे टेक्स्टबॉक्स या ट्री व्यू कंट्रोल), इन नियंत्रणों को मुख्य ईवेंट प्राप्त होते हैं और कमांड अब ट्रिगर नहीं होता है। इन नियंत्रणों में कोई विशिष्ट CommandBindings
या InputBindings
परिभाषित नहीं है।
यह मैं अपने इनपुट इशारा कैसे परिभाषित है:
XAML:
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" >
<StackPanel>
<TreeView>
<TreeViewItem Header="1">
<TreeViewItem Header="1.1"></TreeViewItem>
<TreeViewItem Header="1.2"></TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="2" ></TreeViewItem>
</TreeView>
<TextBox />
<Label Name="label1" />
</StackPanel>
</Window>
कोड:
using System;
using System.Windows;
using System.Windows.Input;
public static class Commands
{
private static RoutedUICommand _myCommand;
static Commands()
{
_myCommand = new RoutedUICommand("My Command",
"My Command",
typeof(Commands),
new InputGestureCollection()
{
new KeyGesture(Key.PageDown, ModifierKeys.None)
});
}
public static ICommand MyCommand
{
get { return _myCommand; }
}
}
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
CommandBinding cb = new CommandBinding();
cb.Command = Commands.MyCommand;
cb.Executed += new ExecutedRoutedEventHandler(cb_Executed);
cb.CanExecute += new CanExecuteRoutedEventHandler(cb_CanExecute);
this.CommandBindings.Add(cb);
}
void cb_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
void cb_Executed(object sender, ExecutedRoutedEventArgs e)
{
this.label1.Content = string.Format("My Command was executed {0}", DateTime.Now);
}
}
मैं पहले से ही के रूप में व्यवहार यह था खिड़की के PreviewKeyDown
घटना को पकड़ने और यह अंकन की कोशिश की वांछित प्रभाव नहीं। मैंने Focusable
संपत्ति को false
पर भी सेट किया है। इससे टेक्स्टबॉक्स नियंत्रणों में मदद मिली, लेकिन TreeView के लिए नहीं (और अवांछित प्रभाव है, कि टेक्स्टबॉक्स अब संपादित नहीं किया जा सकता है, इसलिए यह मेरे लिए समाधान नहीं है)।
तो मेरा सवाल यह है कि मैं एक कुंजीपटल शॉर्टकट कैसे परिभाषित कर सकता हूं जो मुख्य विंडो में हर जगह काम करता है?
आप कमांडबिंडिंग के बजाय इनपुटबिंडिंग संग्रह भी देखना चाहेंगे। कभी-कभी आपके पास कमांडबिंडिंग्स में रूटेड कमांड नहीं होगा ... – Anvaka
हां, मैं इसके बारे में भूल गया, टिप के लिए धन्यवाद :-) –
यह एक लाइफसेवर है। धन्यवाद! – tltjr