首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建当值为0时隐藏的ProgressBar?

如何创建当值为0时隐藏的ProgressBar?
EN

Stack Overflow用户
提问于 2011-07-21 06:45:04
回答 3查看 6.9K关注 0票数 2

下面的代码不太有效(ProgressValue是在DataContext中设置的值)。

代码语言:javascript
复制
<StatusBarItem Grid.Column="1">
    <StatusBarItem.Resources>
        <Style TargetType="ProgressBar">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ProgressValue}" Value="0">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </StatusBarItem.Resources>
    <ProgressBar Value="{Binding ProgressValue}" Grid.Column="1" Width="80" Height="13">
    </ProgressBar>
</StatusBarItem>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-21 06:53:24

尝试指定最小值(和最大值)。在设置了这些之后,它似乎适用于我的代码版本。

使用此XAML:

代码语言:javascript
复制
    <StatusBarItem x:Name="Feedback" Grid.Row="1">
        <StatusBarItem.Resources>
            <Style TargetType="ProgressBar">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding}" Value="0">
                        <Setter Property="Visibility" Value="Hidden"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </StatusBarItem.Resources>
        <ProgressBar Value="{Binding Mode=OneWay}" Minimum="0" Maximum="10" Grid.Column="1" Width="80" Height="13">
        </ProgressBar>
    </StatusBarItem>

以及MainWindows.xaml.cs的构造函数中的代码(仅用于测试目的)

代码语言:javascript
复制
    int value = 10;
    public MainWindow()
    {
        InitializeComponent();
        Feedback.DataContext = value;

        Timer t = new Timer(500);
        t.Elapsed += (s, e) =>
            {
                if (value > 0) Dispatcher.Invoke(new Action(() => { Feedback.DataContext = --value; }));
                else t.Stop();
            };

        t.Start();
    }

我让进度条从10到0,在这一点上进度条消失了。

票数 4
EN

Stack Overflow用户

发布于 2011-07-21 06:51:08

尝试在其ValueChanged事件中设置ProgressBar的Visibility属性:

代码语言:javascript
复制
private void progressBar1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
    progressBar1.Visibility = (progressBar1.Value == 0) ? Visibility.Hidden : Visibility.Visible;
}
票数 6
EN

Stack Overflow用户

发布于 2011-07-21 07:10:18

示例XAML:

代码语言:javascript
复制
<ProgressBar>
    <ProgressBar.Resources>
        <src:DoubleToVisibilityConverter x:Key="_doubleToVisibilityConverter" />
    </ProgressBar.Resources>
    <ProgressBar.Visibility>
        <Binding
            RelativeSource="{RelativeSource Self}"
            Path="Value"
            Converter="{StaticResource _doubleToVisibilityConverter}"
        />
    </ProgressBar.Visibility>
</ProgressBar>

和代码:

代码语言:javascript
复制
public class DoubleToVisibilityConvertor : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        double input = 0;

        if (value is double)
        {
            input = (double)value;
        }
        else if (value is int)
        {
            input = (int)value;
        }
        else if (value is string) // Useful if input of converter is written in XAML
        {
            if (!double.TryParse((string)value, out input))
                return Binding.DoNothing;
        }
        else
        {
            return Binding.DoNothing;
        }

        return (input > 0 ? Visibility.Visible : Visibility.Collapsed);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Binding.DoNothing;
    }
}

免责声明:从内存中编写,未编译或测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6769444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档