PasswordEditorControl.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using InABox.Core;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.Windows.Input;
  5. using System.Windows.Media;
  6. using Xceed.Wpf.Toolkit.PropertyGrid;
  7. namespace InABox.DynamicGrid
  8. {
  9. public class PasswordEditorControl : DynamicEditorControl<string>
  10. {
  11. private bool _viewbuttonvisible;
  12. private Button Button;
  13. private DockPanel DockPanel;
  14. private PasswordBox Editor;
  15. private TextBox Viewer;
  16. public bool ViewButtonVisible
  17. {
  18. get => _viewbuttonvisible;
  19. set
  20. {
  21. _viewbuttonvisible = value;
  22. if (Button != null)
  23. Button.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
  24. }
  25. }
  26. protected override FrameworkElement CreateEditor()
  27. {
  28. if (EditorDefinition != null && EditorDefinition is PasswordEditor passwordEditor)
  29. {
  30. ViewButtonVisible = passwordEditor.ViewButtonVisible;
  31. }
  32. DockPanel = new DockPanel
  33. {
  34. HorizontalAlignment = HorizontalAlignment.Stretch
  35. };
  36. Editor = new PasswordBox
  37. {
  38. VerticalAlignment = VerticalAlignment.Stretch,
  39. VerticalContentAlignment = VerticalAlignment.Center
  40. };
  41. Editor.SetValue(DockPanel.DockProperty, Dock.Left);
  42. Editor.PasswordChanged += (o, e) => CheckChanged();
  43. Viewer = new TextBox
  44. {
  45. VerticalAlignment = VerticalAlignment.Stretch,
  46. VerticalContentAlignment = VerticalAlignment.Center,
  47. IsReadOnly = true
  48. //Visibility = Visibility.Collapsed
  49. };
  50. Viewer.SetValue(DockPanel.DockProperty, Dock.Left);
  51. Button = new Button
  52. {
  53. Content = "..",
  54. Margin = new Thickness(5, 0, 0, 0),
  55. Visibility = _viewbuttonvisible ? Visibility.Visible : Visibility.Collapsed,
  56. Width = 30
  57. };
  58. Button.PreviewMouseDown += Button_MouseDown;
  59. Button.PreviewMouseUp += Button_MouseUp;
  60. Button.SetValue(DockPanel.DockProperty, Dock.Right);
  61. DockPanel.Children.Add(Button);
  62. DockPanel.Children.Add(Editor);
  63. return DockPanel;
  64. }
  65. private void Button_MouseDown(object sender, MouseButtonEventArgs e)
  66. {
  67. Viewer.Text = Editor.Password;
  68. DockPanel.Children.Remove(Editor);
  69. DockPanel.Children.Add(Viewer);
  70. //Editor.Visibility = Visibility.Collapsed;
  71. //Viewer.Visibility = Visibility.Visible;
  72. }
  73. private void Button_MouseUp(object sender, MouseButtonEventArgs e)
  74. {
  75. Viewer.Text = "";
  76. DockPanel.Children.Remove(Viewer);
  77. DockPanel.Children.Add(Editor);
  78. //Viewer.Visibility = Visibility.Collapsed;
  79. //Editor.Visibility = Visibility.Visible;
  80. }
  81. public override int DesiredHeight()
  82. {
  83. return 25;
  84. }
  85. public override int DesiredWidth()
  86. {
  87. return 150 + (int)Button.Width + 5;
  88. }
  89. protected override string RetrieveValue()
  90. {
  91. return Editor.Password;
  92. }
  93. protected override void UpdateValue(string value)
  94. {
  95. Editor.Password = value;
  96. }
  97. public override void SetFocus()
  98. {
  99. Editor.Focus();
  100. }
  101. public override void SetColor(Color color)
  102. {
  103. Editor.Background = new SolidColorBrush(color);
  104. Viewer.Background = new SolidColorBrush(color);
  105. }
  106. }
  107. }