আমার উত্তর উপরের প্রশ্নটি সরাসরি সমাধান করে না, তবে আমি অনুভব করি যে এটির শব্দাবলীর কারণে প্রোগ্রামিকভাবে ফোকাস থেকে মুক্তি পাওয়ার বিষয়ে "প্রশ্ন" হয়ে গেছে। একটি সাধারণ দৃশ্যের যেখানে এটির প্রয়োজন এটি হ'ল উইন্ডোর মতো কোনও রুট কন্ট্রোলের পটভূমিতে বাম-ক্লিকের উপর ফোকাস সাফ করতে সক্ষম হওয়া।
সুতরাং, এটি অর্জন করতে, আপনি একটি সংযুক্ত আচরণ তৈরি করতে পারেন যা গতিশীলভাবে তৈরি নিয়ন্ত্রণের দিকে ফোকাস পরিবর্তন করবে (আমার ক্ষেত্রে, একটি খালি লেবেল)। উইন্ডোজের মতো সর্বোচ্চ স্তরের উপাদানগুলিতে এই আচরণটি ব্যবহার করা পছন্দনীয়, কারণ এটি শিশুদের মাধ্যমে একটি প্যানেল আবিষ্কার করে যাতে এটি একটি ডামি লেবেল যুক্ত করতে পারে rates
public class LoseFocusOnLeftClick : Behavior<FrameworkElement>
{
private readonly MouseBinding _leftClick;
private readonly Label _emptyControl = new Label() { Focusable = true, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top };
public LoseFocusOnLeftClick()
{
_leftClick = new MouseBinding(new RelayCommand(LoseFocus), new MouseGesture(MouseAction.LeftClick));
}
protected override void OnAttached()
{
AssociatedObject.InputBindings.Add(_leftClick);
AssociatedObject.Loaded += AssociatedObject_Loaded;
}
protected override void OnDetaching()
{
AssociatedObject.InputBindings.Remove(_leftClick);
AssociatedObject.Loaded -= AssociatedObject_Loaded;
}
private void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
AssociatedObject.Loaded -= AssociatedObject_Loaded;
AttachEmptyControl();
}
private void AttachEmptyControl()
{
DependencyObject currentElement = AssociatedObject;
while (!(currentElement is Panel))
{
currentElement = VisualTreeHelper.GetChild(currentElement, 0);
}
((Panel)currentElement).Children.Add(_emptyControl);
}
private void LoseFocus()
{
_emptyControl.Focus();
}
}