我在窗口上有一堆控件。其中之一是刷新按鈕,在後臺線程上執行繁瑣的任務。在WPF窗口中禁用除一個子控件之外的所有控件
當用戶單擊刷新按鈕時,我將光標置於等待(沙漏狀態)並禁用整個窗口 - Me.IsEnabled = False
。
我想通過讓用戶單擊取消按鈕來取消刷新操作,但是我無法在整個窗口被禁用時促進此操作。
除了禁用每個控件(除了取消按鈕)之外,還有一種方法可以做到這一點,然後在用戶單擊取消時一個接一個地重新啓用它們嗎?
我在窗口上有一堆控件。其中之一是刷新按鈕,在後臺線程上執行繁瑣的任務。在WPF窗口中禁用除一個子控件之外的所有控件
當用戶單擊刷新按鈕時,我將光標置於等待(沙漏狀態)並禁用整個窗口 - Me.IsEnabled = False
。
我想通過讓用戶單擊取消按鈕來取消刷新操作,但是我無法在整個窗口被禁用時促進此操作。
除了禁用每個控件(除了取消按鈕)之外,還有一種方法可以做到這一點,然後在用戶單擊取消時一個接一個地重新啓用它們嗎?
你可以把一個面板(網格,StackPanel中,等)的所有控件,並在另一個小組留下了取消按鈕。然後設置其他面板的IsEnabled屬性。
實際上,這可能會引入多個附加面板。
舉例來說,如果你有按鈕的StackPanel中,你可以添加一個額外的StackPanel:
<StackPanel Orientation="Horizontal">
<StackPanel x:Name="controlContainer" Orientation="Horizontal">
<!-- Other Buttons Here -->
</StackPanel>
<Button Content="Cancel" />
</StackPanel>
然後,你會做以下禁用一切,但取消按鈕:
controlContainer.IsEnabled = false;
StackPanel在WP8中沒有IsEnabled屬性 – radders 2014-09-08 15:47:15
您可以將每個控件的IsEnabled屬性綁定到您的自定義布爾依賴項屬性,該屬性在您的應用程序處於鎖定狀態時發出信號。只要不綁定取消按鈕。
由於Donnelle提到你可以設置與轉換器的多重綁定。這裏有一些你可以參考的例子。 WPF MultiBinding with Converter Implementing Parameterized MultiBinding Sample
我唯一的問題w /那就是我的一些控件上的IsEnabled屬性已經綁定了數據綁定到一個布爾屬性用於其他目的。 – 2008-11-07 22:34:19
你可以使用一個多變量綁定與轉換器 - 有關如何做一個具有與或行爲的參數通用的例子。 – Donnelle 2008-11-08 23:17:15
我也希望用戶能夠取消加載。 我找到了一個可愛的解決方案。
foreach (Control ctrl in this.Controls)
ctrl.Enabled = false;
CancelButton.Enabled = true;
這也允許選擇主窗口和不像this.Enabled = false;
其中窗完全鎖定了移動。
我似乎無法使用Me.IsEnabled和Me.Cursor。 http://stackoverflow.com/questions/762396/wpf-wait-cursor-with-backgroundworker-thread – 2009-04-17 22:08:30