Dreamine.UI.Wpf.Controls 1.0.1
Dreamine.UI.Wpf.Controls 사용자 인터페이스 기능과 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.UI.Wpf.Controls.DreaminePasswordBox 클래스 참조

더 자세히 ...

Dreamine.UI.Wpf.Controls.DreaminePasswordBox에 대한 상속 다이어그램 :
Dreamine.UI.Wpf.Controls.DreaminePasswordBox에 대한 협력 다이어그램:

Public 멤버 함수

override void OnApplyTemplate ()

정적 Public 속성

static readonly DependencyProperty HintProperty
static readonly DependencyProperty ErrorProperty
static readonly DependencyProperty IsPasswordEmptyProperty
static readonly DependencyProperty PasswordProperty

속성

string Password [get, set]
string Hint [get, set]
string Error [get, set]
bool IsPasswordEmpty [get, set]

Private 멤버 함수

void DetachPartHandlers ()
void OnHostMouseDown (object sender, System.Windows.Input.MouseButtonEventArgs e)
void OnHostGotKeyboardFocus (object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)
void SyncDpToPart (string newPassword)

정적 Private 멤버 함수

static DreaminePasswordBox ()
static void OnPasswordChanged (DependencyObject d, DependencyPropertyChangedEventArgs e)

Private 속성

PasswordBox? _partPasswordBox
RoutedEventHandler? _passwordChangedHandler
bool _isSyncing

상세한 설명

힌트·오류 표시와 양방향 바인딩 가능한 암호 문자열을 제공하는 사용자 지정 암호 입력 컨트롤입니다.

DreaminePasswordBox.cs 파일의 26 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ DreaminePasswordBox()

Dreamine.UI.Wpf.Controls.DreaminePasswordBox.DreaminePasswordBox ( )
inlinestaticprivate

기본 스타일 키를 재정의하고 암호 상자 테마 리소스를 병합합니다.

DreaminePasswordBox.cs 파일의 39 번째 라인에서 정의되었습니다.

40 {
41 DefaultStyleKeyProperty.OverrideMetadata(typeof(DreaminePasswordBox),
42 new FrameworkPropertyMetadata(typeof(DreaminePasswordBox)));
43
44 // \brief 스타일 리소스 병합
45 var uri = new Uri("/Dreamine.UI.Wpf.Themes;component/DreaminePasswordBoxStyle.xaml", UriKind.RelativeOrAbsolute);
46
47 if (Application.Current != null)
48 {
49 bool alreadyAdded = Application.Current.Resources.MergedDictionaries
50 .OfType<ResourceDictionary>()
51 .Any(x => x.Source != null && x.Source.Equals(uri));
52
53 if (!alreadyAdded)
54 {
55 var dict = new ResourceDictionary { Source = uri };
56 Application.Current.Resources.MergedDictionaries.Add(dict);
57 }
58 }
59 }

다음을 참조함 : DreaminePasswordBox().

다음에 의해서 참조됨 : DreaminePasswordBox(), OnPasswordChanged().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 함수 문서화

◆ DetachPartHandlers()

void Dreamine.UI.Wpf.Controls.DreaminePasswordBox.DetachPartHandlers ( )
inlineprivate

템플릿 재적용 전에 호스트 이벤트를 해제하고 내부 파트 캐시를 비웁니다.

DreaminePasswordBox.cs 파일의 278 번째 라인에서 정의되었습니다.

279 {
280 // \note PasswordBox.PasswordChanged는 익명 람다로 직접 해제하기 어려우니
281 // 템플릿 재적용 시 새 PART로 갈아끼우는 패턴에서 “PART 캐시 교체”로 방어한다.
282 // (현재 구조는 PART가 바뀌면 이전 PART는 UI 트리에서 떨어지므로 누적 영향이 크지 않음)
283
284 this.MouseDown -= OnHostMouseDown;
285 this.GotKeyboardFocus -= OnHostGotKeyboardFocus;
286
287 _partPasswordBox = null;
288 _passwordChangedHandler = null;
289 }

다음을 참조함 : _partPasswordBox, _passwordChangedHandler, OnHostGotKeyboardFocus(), OnHostMouseDown().

다음에 의해서 참조됨 : OnApplyTemplate().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnApplyTemplate()

override void Dreamine.UI.Wpf.Controls.DreaminePasswordBox.OnApplyTemplate ( )
inline

템플릿을 적용할 때 PART_PasswordBox를 찾아 값과 이벤트를 연결합니다.

DreaminePasswordBox.cs 파일의 221 번째 라인에서 정의되었습니다.

222 {
223 base.OnApplyTemplate();
224
225 // \brief 이전 PART가 있으면 이벤트 해제
226 DetachPartHandlers();
227
228 _partPasswordBox = GetTemplateChild("PART_PasswordBox") as PasswordBox;
229 if (_partPasswordBox == null)
230 return;
231
232 // \brief 최초 동기화: DP -> PART
233 SyncDpToPart(Password);
234
235 // \brief PasswordChanged 연결 (참조 보관)
236 _passwordChangedHandler = (_, __) =>
237 {
238 if (_partPasswordBox == null)
239 return;
240
241 if (_isSyncing)
242 return;
243
244 try
245 {
246 _isSyncing = true;
247
248 string pwd = _partPasswordBox.Password ?? string.Empty;
249
250 // \brief PART -> DP
251 if (!string.Equals(Password ?? string.Empty, pwd, StringComparison.Ordinal))
252 SetCurrentValue(PasswordProperty, pwd);
253
254 // \brief empty 플래그 갱신
255 SetCurrentValue(IsPasswordEmptyProperty, string.IsNullOrEmpty(pwd));
256 }
257 finally
258 {
259 _isSyncing = false;
260 }
261 };
262
263 _partPasswordBox.PasswordChanged += (s, e) => _passwordChangedHandler?.Invoke(s, e);
264
265 // \brief 컨트롤 클릭 시 내부 입력으로 포커스 이동 (UX)
266 this.MouseDown += OnHostMouseDown;
267 this.GotKeyboardFocus += OnHostGotKeyboardFocus;
268 }

다음을 참조함 : _isSyncing, _partPasswordBox, _passwordChangedHandler, DetachPartHandlers(), IsPasswordEmptyProperty, OnHostGotKeyboardFocus(), OnHostMouseDown(), Password, PasswordProperty, SyncDpToPart().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnHostGotKeyboardFocus()

void Dreamine.UI.Wpf.Controls.DreaminePasswordBox.OnHostGotKeyboardFocus ( object sender,
System.Windows.Input.KeyboardFocusChangedEventArgs e )
inlineprivate

호스트가 키보드 포커스를 받으면 내부 암호 입력으로 포커스를 전달합니다.

매개변수
sender이벤트를 발생시킨 호스트입니다.
e이전·새 포커스를 제공하는 이벤트 데이터입니다.

DreaminePasswordBox.cs 파일의 344 번째 라인에서 정의되었습니다.

345 {
346 if (e.NewFocus == this)
347 {
348 _partPasswordBox?.Focus();
349 e.Handled = true;
350 }
351 }

다음을 참조함 : _partPasswordBox.

다음에 의해서 참조됨 : DetachPartHandlers(), OnApplyTemplate().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnHostMouseDown()

void Dreamine.UI.Wpf.Controls.DreaminePasswordBox.OnHostMouseDown ( object sender,
System.Windows.Input.MouseButtonEventArgs e )
inlineprivate

호스트를 클릭하면 내부 암호 입력으로 포커스를 이동합니다.

매개변수
sender이벤트를 발생시킨 호스트입니다.
e마우스 버튼 이벤트 데이터입니다.

DreaminePasswordBox.cs 파일의 315 번째 라인에서 정의되었습니다.

316 {
317 _partPasswordBox?.Focus();
318 }

다음을 참조함 : _partPasswordBox.

다음에 의해서 참조됨 : DetachPartHandlers(), OnApplyTemplate().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnPasswordChanged()

void Dreamine.UI.Wpf.Controls.DreaminePasswordBox.OnPasswordChanged ( DependencyObject d,
DependencyPropertyChangedEventArgs e )
inlinestaticprivate

암호 종속성 속성의 외부 변경을 내부 암호 입력에 반영합니다.

매개변수
d암호가 변경된 컨트롤입니다.
e새 암호 값을 포함한 변경 데이터입니다.

DreaminePasswordBox.cs 파일의 381 번째 라인에서 정의되었습니다.

382 {
383 if (d is not DreaminePasswordBox control)
384 return;
385
386 if (control._isSyncing)
387 return;
388
389 string newPassword = e.NewValue as string ?? string.Empty;
390
391 control.SyncDpToPart(newPassword);
392 }

다음을 참조함 : DreaminePasswordBox().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SyncDpToPart()

void Dreamine.UI.Wpf.Controls.DreaminePasswordBox.SyncDpToPart ( string newPassword)
inlineprivate

재진입을 방지하면서 암호 종속성 속성 값을 내부 파트에 동기화합니다.

매개변수
newPassword내부 파트에 적용할 암호입니다.

DreaminePasswordBox.cs 파일의 410 번째 라인에서 정의되었습니다.

411 {
412 try
413 {
414 _isSyncing = true;
415
416 SetCurrentValue(IsPasswordEmptyProperty, string.IsNullOrEmpty(newPassword));
417
418 if (_partPasswordBox != null)
419 {
420 string current = _partPasswordBox.Password ?? string.Empty;
421 if (!string.Equals(current, newPassword, StringComparison.Ordinal))
422 _partPasswordBox.Password = newPassword;
423 }
424 }
425 finally
426 {
427 _isSyncing = false;
428 }
429 }

다음을 참조함 : _isSyncing, _partPasswordBox, IsPasswordEmptyProperty.

다음에 의해서 참조됨 : OnApplyTemplate().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _isSyncing

bool Dreamine.UI.Wpf.Controls.DreaminePasswordBox._isSyncing
private

종속성 속성과 내부 파트 동기화의 재진입을 방지합니다.

DreaminePasswordBox.cs 파일의 207 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : OnApplyTemplate(), SyncDpToPart().

◆ _partPasswordBox

PasswordBox? Dreamine.UI.Wpf.Controls.DreaminePasswordBox._partPasswordBox
private

템플릿의 내부 암호 상자 파트를 캐시합니다.

DreaminePasswordBox.cs 파일의 187 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DetachPartHandlers(), OnApplyTemplate(), OnHostGotKeyboardFocus(), OnHostMouseDown(), SyncDpToPart().

◆ _passwordChangedHandler

RoutedEventHandler? Dreamine.UI.Wpf.Controls.DreaminePasswordBox._passwordChangedHandler
private

내부 암호 변경 처리기 참조를 보관합니다.

DreaminePasswordBox.cs 파일의 197 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DetachPartHandlers(), OnApplyTemplate().

◆ ErrorProperty

readonly DependencyProperty Dreamine.UI.Wpf.Controls.DreaminePasswordBox.ErrorProperty
static
초기값:
=
DependencyProperty.Register(nameof(Error), typeof(string), typeof(DreaminePasswordBox),
new PropertyMetadata(string.Empty))

오류 메시지 텍스트 종속성 속성입니다.

DreaminePasswordBox.cs 파일의 85 번째 라인에서 정의되었습니다.

◆ HintProperty

readonly DependencyProperty Dreamine.UI.Wpf.Controls.DreaminePasswordBox.HintProperty
static
초기값:
=
DependencyProperty.Register(nameof(Hint), typeof(string), typeof(DreaminePasswordBox),
new PropertyMetadata(string.Empty))

암호가 비었을 때 표시할 힌트 텍스트 종속성 속성입니다.

DreaminePasswordBox.cs 파일의 73 번째 라인에서 정의되었습니다.

◆ IsPasswordEmptyProperty

readonly DependencyProperty Dreamine.UI.Wpf.Controls.DreaminePasswordBox.IsPasswordEmptyProperty
static
초기값:
=
DependencyProperty.Register(nameof(IsPasswordEmpty), typeof(bool), typeof(DreaminePasswordBox),
new PropertyMetadata(true))

내부 암호 상자가 비었는지 나타내는 종속성 속성입니다.

DreaminePasswordBox.cs 파일의 97 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : OnApplyTemplate(), SyncDpToPart().

◆ PasswordProperty

readonly DependencyProperty Dreamine.UI.Wpf.Controls.DreaminePasswordBox.PasswordProperty
static
초기값:
=
DependencyProperty.Register(
nameof(Password),
typeof(string),
new FrameworkPropertyMetadata(
string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
static void OnPasswordChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)

기본적으로 양방향 바인딩되는 암호 문자열 종속성 속성입니다.

DreaminePasswordBox.cs 파일의 109 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : OnApplyTemplate().

속성 문서화

◆ Error

string Dreamine.UI.Wpf.Controls.DreaminePasswordBox.Error
getset

표시할 오류 문자열을 가져오거나 설정합니다.

DreaminePasswordBox.cs 파일의 155 번째 라인에서 정의되었습니다.

156 {
157 get => (string)GetValue(ErrorProperty);
158 set => SetValue(ErrorProperty, value);
159 }

◆ Hint

string Dreamine.UI.Wpf.Controls.DreaminePasswordBox.Hint
getset

암호가 비었을 때 표시할 힌트 문자열을 가져오거나 설정합니다.

DreaminePasswordBox.cs 파일의 141 번째 라인에서 정의되었습니다.

142 {
143 get => (string)GetValue(HintProperty);
144 set => SetValue(HintProperty, value);
145 }

◆ IsPasswordEmpty

bool Dreamine.UI.Wpf.Controls.DreaminePasswordBox.IsPasswordEmpty
getset

현재 암호가 비어 있는지 가져오거나 설정합니다.

DreaminePasswordBox.cs 파일의 169 번째 라인에서 정의되었습니다.

170 {
171 get => (bool)GetValue(IsPasswordEmptyProperty);
172 set => SetValue(IsPasswordEmptyProperty, value);
173 }

◆ Password

string Dreamine.UI.Wpf.Controls.DreaminePasswordBox.Password
getset

ViewModel에 바인딩할 암호 문자열을 가져오거나 설정합니다.

DreaminePasswordBox.cs 파일의 127 번째 라인에서 정의되었습니다.

128 {
129 get => (string)GetValue(PasswordProperty);
130 set => SetValue(PasswordProperty, value);
131 }

다음에 의해서 참조됨 : OnApplyTemplate().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: