2008-11-07 2 views
13

내 창에 여러 개의 컨트롤이 있습니다. 그 중 하나는 백그라운드 스레드에서 성가신 작업을 수행하는 새로 고침 버튼입니다.WPF 창에서 하나의 하위 컨트롤을 제외한 모든 설정을 비활성화합니다.

사용자가 새로 고침 버튼을 클릭하면 대기 (모래 시계) 상태로 커서를 놓고 전체 창 (Me.IsEnabled = False)을 비활성화합니다.

사용자가 취소 버튼을 클릭하여 새로 고침 작업 취소를 지원하고 싶지만 전체 창이 비활성화되어있는 동안이 작업을 쉽게 수행 할 수 없습니다.

취소 버튼을 제외한 각 컨트롤을 하나씩 비활성화 한 다음 사용자가 취소를 클릭 할 때 하나씩 다시 활성화하는 방법이 있습니까?

+0

Me.IsEnabled와 Me.Cursor 둘 다 사용할 수 없습니다. http://stackoverflow.com/questions/762396/wpf-wait-cursor-with-backgroundworker-thread –

답변

19

당신은 하나 개의 패널 (그리드, StackPanel의 등)의 모든 컨트롤을 넣어, 다른 패널에서 취소 버튼을 남길 수 있습니다. 그런 다음 다른 패널의 IsEnabled 속성을 설정하십시오.

실제로 이것은 두 개 이상의 추가 패널을 도입 할 것입니다.

controlContainer.IsEnabled = false; 
+0

StackPanel은 WP8에서 IsEnabled 속성을 가지고 있지 않습니다. – radders

+0

글쎄 WP8과 함께 0 번 작업을했는데 WP8'StackPanel'에 대한 문서를 찾았습니다 : http://msdn.microsoft.com/en-US/library/ windows/apps/windows.ui.xaml.controls.stackpanel.aspx 실버 라이트는 'IsEnabled' 속성을 가지고 있기 때문에 여러분은 실버 라이트가 아닌 아파치를 사용하고 있다고 가정합니다. 비활성화 된 컨트롤의 정확한 모습을 얻지는 못하지만, 항상'IsHitTestVisible = "false"를 설정하여'controlContainer'에서 입력을 비활성화 할 수 있습니다. 그렇지 않으면 반투명 오버레이를 사용하여 다른 컨트롤을 비활성화하고 (외부 패널로 '격자'를 사용하려는 경우) 볼 수있게 할 수 있습니다. –

3

각 컨트롤 IsEnabled 속성을 응용 프로그램이 잠겨있을 때 신호를 보내는 사용자 지정 부울 종속성 속성에 바인딩 할 수 있습니다. 취소 버튼을 묶지 마십시오.

Donnelle 언급대로 변환기로 멀티 바인딩을 설정할 수 있습니다. 다음은 참조 할 수있는 몇 가지 예입니다. WPF MultiBinding with Converter Implementing Parameterized MultiBinding Sample

+0

내 컨트롤의 일부 IsEnabled 속성이 이미 부울 속성에 바인딩 된 데이터가있는 승 /있는 유일한 문제는 다른 목적으로. –

+1

변환기를 사용하여 다중 바인딩을 사용할 수 있습니다. AND 또는 OR 동작에 대한 매개 변수를 사용하여 일반적인 바인딩을 수행하는 방법에 대한 예제가 있습니다. – Donnelle

5
: 당신은 취소 버튼을하지만 모든 것을 해제하려면 다음을 할 것, 그리고

<StackPanel Orientation="Horizontal"> 
    <StackPanel x:Name="controlContainer" Orientation="Horizontal"> 
     <!-- Other Buttons Here --> 
    </StackPanel> 
    <Button Content="Cancel" /> 
</StackPanel> 

: 당신은 버튼의 StackPanel에 있었다면

예를 들어, 추가 StackPanel에 추가 할 수 있습니다

사용자가 로딩을 취소 할 수 있기를 바랍니다. 멋진 솔루션을 발견했습니다.

foreach (Control ctrl in this.Controls) 
    ctrl.Enabled = false; 

CancelButton.Enabled = true; 

이 또한 기본 창 선택 완전히 창을 잠그는 this.Enabled = false; 달리 이동 될 수있다.

+0

WP8에서 컨트롤에 IsEnabled 속성이 없습니다. – radders

관련 문제