PasswordEditorControl.cs 4.0 KB

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