Отследить клик за пределами UserControl

Есть TextBox, который сохраняет полученное значения после потери фокуса. Как реализовать потерю фокуса при при клике в любой точке окна, если TextBox находится в отдельном View (в UserControl)? При использовании Mouse.Capture событие происходит только в UserControl с TextBox, а присоединяться к главному окну проекта я не могу.

        private void EditTextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            AddHandler(Mouse.PreviewMouseDownEvent, new RoutedEventHandler(Foo));
            Mouse.Capture(editTextBox, CaptureMode.None);
        }

        private void Foo(object sender, RoutedEventArgs e)
        {
            Trace.WriteLine("Click");
        }

Ответы (1 шт):

Автор решения: Heliko
        private TextBox _editTextBox;
        private static bool _isRegister;

        private void EditTextBox_PreviewMouseDownEvent(object sender, RoutedEventArgs e)
        {
            if (!_editTextBox.IsMouseOver)
            {
                _editTextBox.Text = _editTextBox.Text;
                _editTextBox.RaiseEvent(new RoutedEventArgs(LostFocusEvent));
            }
        }

        private void EditTextBox_Loaded(object sender, RoutedEventArgs e)
        {
            _editTextBox = (TextBox)sender;

            if (!_isRegister)
            {
                EventManager.RegisterClassHandler(typeof(Window), PreviewMouseDownEvent, new RoutedEventHandler(EditTextBox_PreviewMouseDownEvent));
                _isRegister = true;
            }
        }

TextBox:

            <TextBox x:Name="EditTextBox"
                     Style="{StaticResource TextBoxRectangle}"
                     Text="{Binding Name, UpdateSourceTrigger=LostFocus}"
                     VerticalAlignment="Center"
                     MouseLeave="EditTextBox_MouseLeave"
                     MouseEnter="EditTextBox_MouseEnter"
                     Loaded="EditTextBox_Loaded"
                     Unloaded="EditTextBox_Unloaded">
            </TextBox>

Name TextBox:

        public string Name
        {
            get => _name;
            set
            {
                if (_name == value)
                {
                    IsEditing = false;
                    return;
                }
                _name = value;
                IsEditing = false;
                OnPropertyChanged();
            }
        }

Для чего нужен editTextBox.Text = editTextBox.Text:

                    <ContentControl.Style>
                        <Style TargetType="{x:Type ContentControl}">
                            <Setter Property="ContentTemplate" Value="{StaticResource NormalTemplate}" />
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsEditing}" Value="true">
                                    <Setter Property="ContentTemplate" Value="{StaticResource EditTemplate}" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ContentControl.Style>
→ Ссылка