【发布时间】:2015-02-16 20:05:00
【问题描述】:
我做了一个如下图所示的自定义按钮
<Border x:Name="myBtn" Grid.Column="0" Width="320" Height="100" Margin="10" HorizontalAlignment="Right" Style="{StaticResource myBtnStyle}" Tapped="myBtn_Tapped">
<Grid>
<TextBlock x:Uid="TBmyBtn" Margin="100,20,20,20" Text="Update" Style="{StaticResource myTBStyle}"/>
</Grid>
</Border>
它的点击事件如下图所示
private async void myBtn_Tapped(object sender, TappedRoutedEventArgs e)
{
//Many Network Calls
//Updating Local DB
//Updating ViewModels
// Blah Blah Blah...
}
如果我点击我的自定义按钮(myBtn),它后面的代码开始执行,并且由于有很多网络调用,完成 myBtn_Tapped 函数需要一些时间。
现在我的要求是,我应该禁用 myBtn tap,直到 myBtn_Tapped 完成执行。
我尝试的是
private async void myBtn_Tapped(object sender, TappedRoutedEventArgs e)
{
myBtn.IsTapEnabled=False;
//Many Network Calls
//Updating Local DB
//Updating ViewModels
// Blah Blah Blah...
myBtn.IsTapEnabled=True;
}
但我注意到,即使在myBtn.IsTapEnabled=False; 之后,如果我点击 myBtn 一次,并且当 myBtn_Tapped 函数正在执行时,如果我再次点击 myBtn,则点击事件被注册,并且函数在完成执行后开始执行再次。
如何停止 myBtn 的点击事件注册,直到其背后的代码在事务中??
【问题讨论】:
-
试试 myBtn.IsEnabled = false 怎么样?
标签: wpf xaml windows-runtime winrt-xaml