mirror of
https://github.com/BililiveRecorder/BililiveRecorder.git
synced 2024-11-16 11:42:22 +08:00
52 lines
1.7 KiB
C#
52 lines
1.7 KiB
C#
/**
|
|
* Author: Donnelle
|
|
* From: https://stackoverflow.com/a/661224/8877830
|
|
* */
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
|
|
namespace BililiveRecorder.WPF
|
|
{
|
|
public partial class ClickSelectTextBox : TextBox
|
|
{
|
|
public ClickSelectTextBox()
|
|
{
|
|
AddHandler(PreviewMouseLeftButtonDownEvent,
|
|
new MouseButtonEventHandler(SelectivelyIgnoreMouseButton), true);
|
|
AddHandler(GotKeyboardFocusEvent,
|
|
new RoutedEventHandler(SelectAllText), true);
|
|
AddHandler(MouseDoubleClickEvent,
|
|
new RoutedEventHandler(SelectAllText), true);
|
|
}
|
|
|
|
private static void SelectivelyIgnoreMouseButton(object sender,
|
|
MouseButtonEventArgs e)
|
|
{
|
|
// Find the TextBox
|
|
DependencyObject parent = e.OriginalSource as UIElement;
|
|
while (parent != null && !(parent is TextBox))
|
|
parent = VisualTreeHelper.GetParent(parent);
|
|
|
|
if (parent != null)
|
|
{
|
|
var textBox = (TextBox)parent;
|
|
if (!textBox.IsKeyboardFocusWithin)
|
|
{
|
|
// If the text box is not yet focussed, give it the focus and
|
|
// stop further processing of this click event.
|
|
textBox.Focus();
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void SelectAllText(object sender, RoutedEventArgs e)
|
|
{
|
|
if (e.OriginalSource is TextBox textBox)
|
|
textBox.SelectAll();
|
|
}
|
|
}
|
|
}
|