WPF 창에서 하나의 아동 통제를 제외한 모든 아동 통제 비활성화
-
07-07-2019 - |
문제
창문에 많은 컨트롤이 있습니다. 그중 하나는 배경 스레드에서 번거로운 작업을 수행하는 새로 고침 버튼입니다.
사용자가 새로 고침 버튼을 클릭하면 커서를 대기 (모래 시간) 상태에 넣고 전체 창을 비활성화합니다. Me.IsEnabled = False
.
사용자가 취소 버튼을 클릭하도록하여 새로 고침 작업 취소를 지원하고 싶지만 전체 창이 비활성화 된 동안이를 용이하게 할 수는 없습니다.
각 컨트롤을 비활성화하는 것 외에 (취소 버튼 제외) 하나씩이를 수행 한 다음 사용자가 클릭 할 때 하나씩 다시 활성화하는 방법이 있습니까?
해결책
모든 컨트롤을 한 패널 (그리드, 스택 패널 등)에 넣고 다른 패널에 취소 버튼을 남길 수 있습니다. 그런 다음 다른 패널의 isenabled 속성을 설정하십시오.
실제로 이것은 아마도 하나 이상의 추가 패널을 소개 할 것입니다.
예를 들어, 스택 패널 버튼이있는 경우 추가 스택 패널을 추가 할 수 있습니다.
<StackPanel Orientation="Horizontal">
<StackPanel x:Name="controlContainer" Orientation="Horizontal">
<!-- Other Buttons Here -->
</StackPanel>
<Button Content="Cancel" />
</StackPanel>
그런 다음 취소 버튼을 제외한 모든 것을 비활성화하기 위해 다음을 수행합니다.
controlContainer.IsEnabled = false;
다른 팁
또한 사용자가로드에서 취소 할 수 있기를 원했습니다. 사랑스러운 해결책을 찾았습니다.
foreach (Control ctrl in this.Controls)
ctrl.Enabled = false;
CancelButton.Enabled = true;
이것은 또한 기본 창을 선택하고 움직일 수 있습니다. this.Enabled = false;
창문을 완전히 고정시킵니다.
데이터가 ISENALDED 속성을 각 컨트롤을 바인딩 할 수 있습니다. 응용 프로그램이 잠금 상태 일 때 신호를 보내는 사용자 정의 부울 종속성 속성에 데이터를 바인딩 할 수 있습니다. 취소 버튼을 바인딩하지 마십시오.
Donnelle이 언급했듯이 컨버터로 멀티 바인딩을 설정할 수 있습니다. 다음은 참조 할 수있는 몇 가지 예입니다.컨버터가있는 WPF 멀티 핀딩 매개 변수화 된 멀티 바인딩 샘플 구현