mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-08 12:18:50 +02:00
Refactoring
This commit is contained in:
@@ -1,34 +1,41 @@
|
|||||||
<Window x:Class="Wox.MainWindow"
|
<Window x:Class="Wox.MainWindow"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wox="clr-namespace:Wox"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:vm="clr-namespace:Wox.ViewModel" xmlns:converters="clr-namespace:Wox.Converters"
|
xmlns:wox="clr-namespace:Wox"
|
||||||
|
xmlns:vm="clr-namespace:Wox.ViewModel"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
|
||||||
Title="Wox"
|
Title="Wox"
|
||||||
Topmost="True"
|
Topmost="True"
|
||||||
Loaded="MainWindow_OnLoaded"
|
Loaded="OnLoaded"
|
||||||
|
Closing="OnClosing"
|
||||||
|
PreviewKeyDown="OnPreviewKeyDown"
|
||||||
|
Drop="OnDrop"
|
||||||
|
Deactivated="OnDeactivated"
|
||||||
SizeToContent="Height"
|
SizeToContent="Height"
|
||||||
ResizeMode="NoResize"
|
ResizeMode="NoResize"
|
||||||
Deactivated="MainWindow_OnDeactivated"
|
|
||||||
WindowStyle="None"
|
WindowStyle="None"
|
||||||
WindowStartupLocation="Manual"
|
WindowStartupLocation="Manual"
|
||||||
Drop="MainWindow_OnDrop"
|
|
||||||
AllowDrop="True"
|
AllowDrop="True"
|
||||||
ShowInTaskbar="False"
|
ShowInTaskbar="False"
|
||||||
Style="{DynamicResource WindowStyle}"
|
Style="{DynamicResource WindowStyle}"
|
||||||
Icon="Images\app.png"
|
Icon="Images\app.png"
|
||||||
AllowsTransparency="True"
|
AllowsTransparency="True"
|
||||||
Visibility="{Binding MainWindowVisibility}"
|
Left="{Binding Left, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||||
PreviewKeyDown="Window_PreviewKeyDown" d:DataContext="{d:DesignInstance vm:MainViewModel, IsDesignTimeCreatable=True}">
|
Top="{Binding Top, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||||
|
Visibility="{Binding MainWindowVisibility, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||||
|
d:DataContext="{d:DesignInstance vm:MainViewModel, IsDesignTimeCreatable=True}">
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<DataTemplate DataType="{x:Type vm:ResultsViewModel}">
|
<DataTemplate DataType="{x:Type vm:ResultsViewModel}">
|
||||||
<wox:ResultListBox></wox:ResultListBox>
|
<wox:ResultListBox></wox:ResultListBox>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<Border Style="{DynamicResource WindowBorderStyle}" MouseDown="Border_OnMouseDown">
|
<Border Style="{DynamicResource WindowBorderStyle}" MouseDown="OnMouseDown">
|
||||||
<StackPanel Orientation="Vertical">
|
<StackPanel Orientation="Vertical">
|
||||||
<TextBox Style="{DynamicResource QueryBoxStyle}" Text="{Binding QueryText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
<TextBox Style="{DynamicResource QueryBoxStyle}"
|
||||||
PreviewDragOver="TbQuery_OnPreviewDragOver" AllowDrop="True"
|
Text="{Binding QueryText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||||
|
PreviewDragOver="OnPreviewDragOver"
|
||||||
|
AllowDrop="True"
|
||||||
x:Name="QueryTextBox" />
|
x:Name="QueryTextBox" />
|
||||||
<Line Style="{DynamicResource PendingLineStyle}" x:Name="progressBar" Y1="0" Y2="0" X2="100" Height="2" StrokeThickness="1"
|
<Line Style="{DynamicResource PendingLineStyle}" x:Name="progressBar" Y1="0" Y2="0" X2="100" Height="2" StrokeThickness="1"
|
||||||
Visibility="{Binding ProgressBarVisibility}">
|
Visibility="{Binding ProgressBarVisibility}">
|
||||||
|
|||||||
@@ -21,20 +21,18 @@ namespace Wox
|
|||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
|
|
||||||
#region Properties
|
#region Private Fields
|
||||||
|
|
||||||
private readonly Storyboard progressBarStoryboard = new Storyboard();
|
private readonly Storyboard _progressBarStoryboard = new Storyboard();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
Closing += MainWindow_Closing;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow_Closing(object sender, CancelEventArgs e)
|
private void OnClosing(object sender, CancelEventArgs e)
|
||||||
{
|
{
|
||||||
UserSettingStorage.Instance.WindowLeft = Left;
|
UserSettingStorage.Instance.WindowLeft = Left;
|
||||||
UserSettingStorage.Instance.WindowTop = Top;
|
UserSettingStorage.Instance.WindowTop = Top;
|
||||||
@@ -42,44 +40,29 @@ namespace Wox
|
|||||||
e.Cancel = true;
|
e.Cancel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
|
private void OnLoaded(object sender, RoutedEventArgs _)
|
||||||
{
|
{
|
||||||
|
CheckUpdate();
|
||||||
|
|
||||||
ThemeManager.Theme.ChangeTheme(UserSettingStorage.Instance.Theme);
|
ThemeManager.Theme.ChangeTheme(UserSettingStorage.Instance.Theme);
|
||||||
InternationalizationManager.Instance.ChangeLanguage(UserSettingStorage.Instance.Language);
|
InternationalizationManager.Instance.ChangeLanguage(UserSettingStorage.Instance.Language);
|
||||||
|
|
||||||
InitProgressbarAnimation();
|
InitProgressbarAnimation();
|
||||||
WindowIntelopHelper.DisableControlBox(this);
|
WindowIntelopHelper.DisableControlBox(this);
|
||||||
CheckUpdate();
|
|
||||||
|
|
||||||
var vm = DataContext as MainViewModel;
|
var vm = (MainViewModel)DataContext;
|
||||||
vm.PropertyChanged += (o, eve) =>
|
vm.TextBoxSelected += (o, e) => QueryTextBox.SelectAll();
|
||||||
|
vm.CursorMovedToEnd += (o, e) =>
|
||||||
{
|
{
|
||||||
if(eve.PropertyName == "SelectAllText")
|
QueryTextBox.Focus();
|
||||||
|
QueryTextBox.CaretIndex = QueryTextBox.Text.Length;
|
||||||
|
};
|
||||||
|
vm.MainWindowVisibilityChanged += (o, e) =>
|
||||||
|
{
|
||||||
|
if (vm.MainWindowVisibility.IsVisible())
|
||||||
{
|
{
|
||||||
if (vm.SelectAllText)
|
Activate();
|
||||||
{
|
QueryTextBox.Focus();
|
||||||
QueryTextBox.SelectAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(eve.PropertyName == "CaretIndex")
|
|
||||||
{
|
|
||||||
QueryTextBox.CaretIndex = vm.CaretIndex;
|
|
||||||
}
|
|
||||||
else if(eve.PropertyName == "Left")
|
|
||||||
{
|
|
||||||
Left = vm.Left;
|
|
||||||
}
|
|
||||||
else if(eve.PropertyName == "Top")
|
|
||||||
{
|
|
||||||
Top = vm.Top;
|
|
||||||
}
|
|
||||||
else if(eve.PropertyName == "MainWindowVisibility")
|
|
||||||
{
|
|
||||||
if (vm.MainWindowVisibility.IsVisible())
|
|
||||||
{
|
|
||||||
Activate();
|
|
||||||
QueryTextBox.Focus();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -94,7 +77,7 @@ namespace Wox
|
|||||||
|
|
||||||
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
||||||
var dipPoint = WindowIntelopHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0);
|
var dipPoint = WindowIntelopHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0);
|
||||||
UserSettingStorage.Instance.WindowLeft = (dipPoint.X - ActualWidth)/2;
|
UserSettingStorage.Instance.WindowLeft = (dipPoint.X - ActualWidth) / 2;
|
||||||
return UserSettingStorage.Instance.WindowLeft;
|
return UserSettingStorage.Instance.WindowLeft;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,7 +87,7 @@ namespace Wox
|
|||||||
|
|
||||||
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
||||||
var dipPoint = WindowIntelopHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height);
|
var dipPoint = WindowIntelopHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height);
|
||||||
UserSettingStorage.Instance.WindowTop = (dipPoint.Y - QueryTextBox.ActualHeight)/4;
|
UserSettingStorage.Instance.WindowTop = (dipPoint.Y - QueryTextBox.ActualHeight) / 4;
|
||||||
return UserSettingStorage.Instance.WindowTop;
|
return UserSettingStorage.Instance.WindowTop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,19 +118,19 @@ namespace Wox
|
|||||||
var da1 = new DoubleAnimation(progressBar.X1, ActualWidth, new Duration(new TimeSpan(0, 0, 0, 0, 1600)));
|
var da1 = new DoubleAnimation(progressBar.X1, ActualWidth, new Duration(new TimeSpan(0, 0, 0, 0, 1600)));
|
||||||
Storyboard.SetTargetProperty(da, new PropertyPath("(Line.X2)"));
|
Storyboard.SetTargetProperty(da, new PropertyPath("(Line.X2)"));
|
||||||
Storyboard.SetTargetProperty(da1, new PropertyPath("(Line.X1)"));
|
Storyboard.SetTargetProperty(da1, new PropertyPath("(Line.X1)"));
|
||||||
progressBarStoryboard.Children.Add(da);
|
_progressBarStoryboard.Children.Add(da);
|
||||||
progressBarStoryboard.Children.Add(da1);
|
_progressBarStoryboard.Children.Add(da1);
|
||||||
progressBarStoryboard.RepeatBehavior = RepeatBehavior.Forever;
|
_progressBarStoryboard.RepeatBehavior = RepeatBehavior.Forever;
|
||||||
progressBar.Visibility = Visibility.Hidden;
|
progressBar.Visibility = Visibility.Hidden;
|
||||||
progressBar.BeginStoryboard(progressBarStoryboard);
|
progressBar.BeginStoryboard(_progressBarStoryboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Border_OnMouseDown(object sender, MouseButtonEventArgs e)
|
private void OnMouseDown(object sender, MouseButtonEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.ChangedButton == MouseButton.Left) DragMove();
|
if (e.ChangedButton == MouseButton.Left) DragMove();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MainWindow_OnDeactivated(object sender, EventArgs e)
|
private void OnDeactivated(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (UserSettingStorage.Instance.HideWhenDeactive)
|
if (UserSettingStorage.Instance.HideWhenDeactive)
|
||||||
{
|
{
|
||||||
@@ -155,7 +138,7 @@ namespace Wox
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
|
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
var vm = DataContext as MainViewModel;
|
var vm = DataContext as MainViewModel;
|
||||||
|
|
||||||
@@ -317,7 +300,7 @@ namespace Wox
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MainWindow_OnDrop(object sender, DragEventArgs e)
|
private void OnDrop(object sender, DragEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.Data.GetDataPresent(DataFormats.FileDrop))
|
if (e.Data.GetDataPresent(DataFormats.FileDrop))
|
||||||
{
|
{
|
||||||
@@ -335,7 +318,7 @@ namespace Wox
|
|||||||
e.Handled = false;
|
e.Handled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TbQuery_OnPreviewDragOver(object sender, DragEventArgs e)
|
private void OnPreviewDragOver(object sender, DragEventArgs e)
|
||||||
{
|
{
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,14 +63,13 @@ namespace Wox
|
|||||||
public void ChangeQuery(string query, bool requery = false)
|
public void ChangeQuery(string query, bool requery = false)
|
||||||
{
|
{
|
||||||
MainVM.QueryText = query;
|
MainVM.QueryText = query;
|
||||||
MainVM.CaretIndex = MainVM.QueryText.Length;
|
MainVM.OnCursorMovedToEnd();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ChangeQueryText(string query, bool selectAll = false)
|
public void ChangeQueryText(string query, bool selectAll = false)
|
||||||
{
|
{
|
||||||
MainVM.QueryText = query;
|
MainVM.QueryText = query;
|
||||||
MainVM.SelectAllText = true;
|
MainVM.OnTextBoxSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CloseApp()
|
public void CloseApp()
|
||||||
@@ -200,7 +199,7 @@ namespace Wox
|
|||||||
{
|
{
|
||||||
UserSettingStorage.Instance.IncreaseActivateTimes();
|
UserSettingStorage.Instance.IncreaseActivateTimes();
|
||||||
MainVM.MainWindowVisibility = Visibility.Visible;
|
MainVM.MainWindowVisibility = Visibility.Visible;
|
||||||
MainVM.SelectAllText = true;
|
MainVM.OnTextBoxSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetHotkey(string hotkeyStr, EventHandler<HotkeyEventArgs> action)
|
public void SetHotkey(string hotkeyStr, EventHandler<HotkeyEventArgs> action)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
@@ -21,8 +22,6 @@ namespace Wox.ViewModel
|
|||||||
private string _queryText;
|
private string _queryText;
|
||||||
|
|
||||||
private bool _isProgressBarTooltipVisible;
|
private bool _isProgressBarTooltipVisible;
|
||||||
private bool _selectAllText;
|
|
||||||
private int _caretIndex;
|
|
||||||
private double _left;
|
private double _left;
|
||||||
private double _top;
|
private double _top;
|
||||||
|
|
||||||
@@ -68,37 +67,10 @@ namespace Wox.ViewModel
|
|||||||
{
|
{
|
||||||
_queryText = value;
|
_queryText = value;
|
||||||
OnPropertyChanged("QueryText");
|
OnPropertyChanged("QueryText");
|
||||||
|
|
||||||
HandleQueryTextUpdated();
|
HandleQueryTextUpdated();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SelectAllText
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _selectAllText;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_selectAllText = value;
|
|
||||||
OnPropertyChanged("SelectAllText");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int CaretIndex
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _caretIndex;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_caretIndex = value;
|
|
||||||
OnPropertyChanged("CaretIndex");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsProgressBarTooltipVisible
|
public bool IsProgressBarTooltipVisible
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -187,6 +159,7 @@ namespace Wox.ViewModel
|
|||||||
{
|
{
|
||||||
_mainWindowVisibility = value;
|
_mainWindowVisibility = value;
|
||||||
OnPropertyChanged("MainWindowVisibility");
|
OnPropertyChanged("MainWindowVisibility");
|
||||||
|
MainWindowVisibilityChanged?.Invoke(this, new EventArgs());
|
||||||
|
|
||||||
if (!value.IsVisible() && ContextMenuVisibility.IsVisible())
|
if (!value.IsVisible() && ContextMenuVisibility.IsVisible())
|
||||||
{
|
{
|
||||||
@@ -225,7 +198,7 @@ namespace Wox.ViewModel
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
SelectNextItemCommand = new RelayCommand(o =>
|
SelectNextItemCommand = new RelayCommand(_ =>
|
||||||
{
|
{
|
||||||
if (ContextMenuVisibility.IsVisible())
|
if (ContextMenuVisibility.IsVisible())
|
||||||
{
|
{
|
||||||
@@ -390,7 +363,11 @@ namespace Wox.ViewModel
|
|||||||
|
|
||||||
private void HandleQueryTextUpdated()
|
private void HandleQueryTextUpdated()
|
||||||
{
|
{
|
||||||
if (_ignoreTextChange) { _ignoreTextChange = false; return; }
|
if (_ignoreTextChange)
|
||||||
|
{
|
||||||
|
_ignoreTextChange = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
IsProgressBarTooltipVisible = false;
|
IsProgressBarTooltipVisible = false;
|
||||||
if (ContextMenuVisibility.IsVisible())
|
if (ContextMenuVisibility.IsVisible())
|
||||||
@@ -475,15 +452,6 @@ namespace Wox.ViewModel
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
action.Invoke();
|
action.Invoke();
|
||||||
|
|
||||||
//Application.Current.Dispatcher.InvokeAsync(async () =>
|
|
||||||
//{
|
|
||||||
// await Task.Delay(150);
|
|
||||||
// if (!string.IsNullOrEmpty(query.RawQuery) && query.RawQuery == _lastQuery.RawQuery && !_queryHasReturn)
|
|
||||||
// {
|
|
||||||
// StartProgress();
|
|
||||||
// }
|
|
||||||
//});
|
|
||||||
PluginManager.QueryForAllPlugins(query);
|
PluginManager.QueryForAllPlugins(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -507,7 +475,7 @@ namespace Wox.ViewModel
|
|||||||
QueryText = _textBeforeEnterContextMenuMode;
|
QueryText = _textBeforeEnterContextMenuMode;
|
||||||
ContextMenuVisibility = Visibility.Collapsed;
|
ContextMenuVisibility = Visibility.Collapsed;
|
||||||
ResultListBoxVisibility = Visibility.Visible;
|
ResultListBoxVisibility = Visibility.Visible;
|
||||||
CaretIndex = QueryText.Length;
|
OnCursorMovedToEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DisplayQueryHistory(HistoryItem history)
|
private void DisplayQueryHistory(HistoryItem history)
|
||||||
@@ -517,7 +485,7 @@ namespace Wox.ViewModel
|
|||||||
var historyMetadata = QueryHistoryStorage.MetaData;
|
var historyMetadata = QueryHistoryStorage.MetaData;
|
||||||
|
|
||||||
QueryText = history.Query;
|
QueryText = history.Query;
|
||||||
SelectAllText = true;
|
OnTextBoxSelected();
|
||||||
|
|
||||||
var executeQueryHistoryTitle = InternationalizationManager.Instance.GetTranslation("executeQuery");
|
var executeQueryHistoryTitle = InternationalizationManager.Instance.GetTranslation("executeQuery");
|
||||||
var lastExecuteTime = InternationalizationManager.Instance.GetTranslation("lastExecuteTime");
|
var lastExecuteTime = InternationalizationManager.Instance.GetTranslation("lastExecuteTime");
|
||||||
@@ -531,10 +499,8 @@ namespace Wox.ViewModel
|
|||||||
IcoPath = "Images\\history.png",
|
IcoPath = "Images\\history.png",
|
||||||
PluginDirectory = WoxDirectroy.Executable,
|
PluginDirectory = WoxDirectroy.Executable,
|
||||||
Action = _ =>{
|
Action = _ =>{
|
||||||
|
|
||||||
QueryText = history.Query;
|
QueryText = history.Query;
|
||||||
SelectAllText = true;
|
OnTextBoxSelected();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -577,6 +543,19 @@ namespace Wox.ViewModel
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public event EventHandler<ListeningKeyPressedEventArgs> ListeningKeyPressed;
|
public event EventHandler<ListeningKeyPressedEventArgs> ListeningKeyPressed;
|
||||||
|
public event EventHandler MainWindowVisibilityChanged;
|
||||||
|
|
||||||
|
public event EventHandler CursorMovedToEnd;
|
||||||
|
public void OnCursorMovedToEnd()
|
||||||
|
{
|
||||||
|
CursorMovedToEnd?.Invoke(this, new EventArgs());
|
||||||
|
}
|
||||||
|
|
||||||
|
public event EventHandler TextBoxSelected;
|
||||||
|
public void OnTextBoxSelected()
|
||||||
|
{
|
||||||
|
TextBoxSelected?.Invoke(this, new EventArgs());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user