【问题标题】:How to set the background color on a disabled button by a converter?如何通过转换器在禁用按钮上设置背景颜色?
【发布时间】: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


【解决方案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>

【讨论】:

    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2023-02-13
    相关资源
    最近更新 更多