forked from PowerShell/PowerShell
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPickerBase.cs
More file actions
137 lines (115 loc) · 4.21 KB
/
Copy pathPickerBase.cs
File metadata and controls
137 lines (115 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//-----------------------------------------------------------------------
// <copyright file="PickerBase.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
namespace Microsoft.Management.UI.Internal
{
using System;
using System.Windows;
using System.Collections.Generic;
using System.Text;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Data;
using System.Windows.Controls.Primitives;
using System.Diagnostics;
using System.Windows.Threading;
using System.Diagnostics.CodeAnalysis;
/// <summary>
/// Implements a re-usable base component useful for showing
/// Picker-like controls.
/// </summary>
[SuppressMessage("Microsoft.MSInternal", "CA903:InternalNamespaceShouldNotContainPublicTypes")]
public partial class PickerBase : HeaderedContentControl
{
/// <summary>
/// Creates a new instance of the PickerBase class.
/// </summary>
public PickerBase()
{
// empty
}
partial void OnCloseDropDownExecutedImplementation(ExecutedRoutedEventArgs e)
{
this.IsOpen = false;
}
#region DropDownButtonTemplate Changed
partial void OnDropDownButtonTemplateChangedImplementation(PropertyChangedEventArgs<ControlTemplate> e)
{
this.ApplyDropDownButtonTemplate();
}
private void ApplyDropDownButtonTemplate()
{
if (!this.IsLoaded)
{
this.ApplyTemplate();
this.Loaded += new RoutedEventHandler(this.PickerBase_Loaded_ApplyDropDownButtonTemplate);
return;
}
if (null != this.DropDownButtonTemplate && !ReferenceEquals(this.dropDownButton.Template, this.DropDownButtonTemplate))
{
this.dropDownButton.Template = this.DropDownButtonTemplate;
}
}
private void PickerBase_Loaded_ApplyDropDownButtonTemplate(object sender, RoutedEventArgs e)
{
this.Loaded -= this.PickerBase_Loaded_ApplyDropDownButtonTemplate;
this.ApplyDropDownButtonTemplate();
}
#endregion DropDownButtonTemplate Changed
#region DropDown IsOpen Handlers
private void DropDown_Opened(object sender, EventArgs e)
{
this.FocusDropDown();
}
private void FocusDropDown()
{
if (!this.dropDown.IsLoaded)
{
this.dropDown.Loaded += new RoutedEventHandler(this.DropDown_Loaded_FocusDropDown);
}
if (null != this.dropDown.Child && !this.dropDown.IsAncestorOf((DependencyObject)Keyboard.FocusedElement))
{
this.dropDown.Child.MoveFocus(new TraversalRequest(FocusNavigationDirection.First));
}
}
private void DropDown_Loaded_FocusDropDown(object sender, RoutedEventArgs e)
{
this.Loaded -= this.DropDown_Loaded_FocusDropDown;
this.FocusDropDown();
}
private void DropDown_Closed(object sender, EventArgs e)
{
if (this.dropDown.IsKeyboardFocusWithin || Keyboard.FocusedElement == null)
{
this.dropDownButton.Focus();
}
}
#endregion DropDown IsOpen Handlers
#region Apply Template
partial void PostOnApplyTemplate()
{
this.AttachToVisualTree();
this.ApplyDropDownButtonTemplate();
}
partial void PreOnApplyTemplate()
{
this.DetachFromVisualTree();
}
private void AttachToVisualTree()
{
this.dropDown.Opened += new EventHandler(this.DropDown_Opened);
this.dropDown.Closed += new EventHandler(this.DropDown_Closed);
}
private void DetachFromVisualTree()
{
if (null != this.dropDown)
{
this.dropDown.Opened -= this.DropDown_Opened;
this.dropDown.Closed -= this.DropDown_Closed;
}
}
#endregion Apply Template
}
}