-2
標題說這一切...如何將按鈕更改爲動畫的加載圖標?
我老實說,在這裏輸了...我使用WPF來做到這一點。我試過使用後臺工作者,線程,Dispatcher.BeginInvoke()和異步等待來實現我的目標,但無濟於事......我在異步等待中解決,因爲我認爲這是更簡單的在這裏發佈.. 。
這裏是我的代碼:
C#代碼背後:
private async void btnLogin_Click(object sender, RoutedEventArgs e)
{
btnLogin.Visibility = Visibility.Hidden;
RollingIcon.Visibility = Visibility.Visible;
await DoLogin();
btnLogin.Visibility = Visibility.Visible;
RollingIcon.Visibility = Visibility.Collapsed;
}
private Task DoLogin()
{
return TaskEx.Run(() => {
//code for validation if no nulls
this.ViewModel.ValidateUserCredentials();
});
}
XAML
<Button x:Name="btnLogin"
Content="Login"
Margin="10,10,10,0"
IsDefault="True"
Foreground="White"
Background="#FF757575"
Click="btnLogin_Click" />
<local:SpinningAnimation x:Name="RollingIcon" Width="40" Height="40" Margin="10,10,10,0" Visibility="Collapsed">
</local:SpinningAnimation >
顯然,System.InvalidOperationException
會彈出因爲視圖模型在日創建e當我試圖在另一個線程上填充主線程時。
請指引我正確的道路,並把我從黑暗的一面...
任何可以理解的。
TIA
如果使用MVVM模式,我覺得你有什麼可怕的錯誤。你正試圖從你的ViewModel的View(UI-Thread)中運行一個任務嗎?即使Visibilty應該綁定到屬性..如果你需要隱藏,使用另一個轉換器。對於登錄,我會寫一個服務類或類似的東西,並將Button綁定到使用它的命令。 –
@丹尼爾 - 這給了我一個主意。將嘗試它!謝謝!儘管downvote真的傷害了這麼多.. –
沒問題..爲了更好的理解,請參閱一些(基本的)MVVM示例以達到您的目的,就像許多已發佈的一樣。如果您確實需要從另一個線程訪問某些內容,則可以使用Dispatcher Invoke ..但在此之前,最好理解線程。我沒有給你一個讚譽,哈哈 –