【发布时间】:2014-12-08 15:58:48
【问题描述】:
我有一个按钮,该按钮的操作可能需要很长时间。是一个异步方法,所以这样我不会阻塞 UI,而且我想禁用按钮以避免执行另一个相同操作的机会。
为此,我禁用了按钮并更改了它的背景,以表明正在运行的操作是我单击此按钮时开始的操作。
我有一个转换器,因为在我的视图模型中,我有一个 bool 属性,用于设置操作是否已开始或操作是否已完成。要将这个 bool 转换为背景颜色,我使用了转换器。
好吧,问题是如果我禁用了按钮,就无法使用转换器设置背景。
我想知道如何做到这一点,禁用按钮并使用转换器更改背景。
我的视图模型中的代码
private async void componentesAsignar()
{
Bussy = true; //need for the converter, to set the background
MyActionStarted = true; //need to disabled the button
await Task.Delay(10000); //the code that takes many time
}
我的代码在我看来
<Button Content="MyAction" Height="23" Name="btnMyAction" Width="75"
Background="{Binding MyActionStarted, Converter={StaticResource actionInProgressToColorConverter}}">
我的转换器
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(((bool)value) == false)
{
return "#FFDDDDDD";
}
else
{
return "#FF589FF3";
}
}
非常感谢。
【问题讨论】:
-
你是如何禁用按钮的?
-
为什么不在按钮上的 Bussy 上放置一个 DataTrigger,以便当它等于 True 时禁用它并更改其背景?
标签: wpf button wpf-controls ivalueconverter