문제

창문에 많은 컨트롤이 있습니다. 그중 하나는 배경 스레드에서 번거로운 작업을 수행하는 새로 고침 버튼입니다.

사용자가 새로 고침 버튼을 클릭하면 커서를 대기 (모래 시간) 상태에 넣고 전체 창을 비활성화합니다. 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 멀티 핀딩 매개 변수화 된 멀티 바인딩 샘플 구현

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top