如何通过转换器在禁用按钮上设置背景颜色?

时间:2014-12-08 15:58:48

标签: wpf button wpf-controls ivalueconverter

我有一个按钮,可能需要花费很多时间。是一种异步方法,所以这样我就不会阻止UI,但我也想禁用该按钮以避免执行另一个相同的操作。

为此,我禁用了按钮并更改了其背景,以显示正在运行的操作是我单击此按钮时启动的操作。

我有一个转换器,因为在我的View Model中,我有一个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";
    }
}

非常感谢。

1 个答案:

答案 0 :(得分:1)

我不使用转换器,而是使用DataTrigger:

<Button ...>
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="#FFDDDDDD"/> 
            <Style.Triggers>
                <DataTrigger Binding="{Binding Bussy, Mode=OneWay}" Value="True">
                    <Setter Property="IsEnabled" Value="False"/>
                    <Setter Property="Background" Value="#FF589FF3"/> 
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>