下面的代码不太有效(ProgressValue是在DataContext中设置的值)。
<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>发布于 2011-07-21 06:53:24
尝试指定最小值(和最大值)。在设置了这些之后,它似乎适用于我的代码版本。
使用此XAML:
<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的构造函数中的代码(仅用于测试目的)
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,在这一点上进度条消失了。
发布于 2011-07-21 06:51:08
尝试在其ValueChanged事件中设置ProgressBar的Visibility属性:
private void progressBar1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
progressBar1.Visibility = (progressBar1.Value == 0) ? Visibility.Hidden : Visibility.Visible;
}发布于 2011-07-21 07:10:18
示例XAML:
<ProgressBar>
<ProgressBar.Resources>
<src:DoubleToVisibilityConverter x:Key="_doubleToVisibilityConverter" />
</ProgressBar.Resources>
<ProgressBar.Visibility>
<Binding
RelativeSource="{RelativeSource Self}"
Path="Value"
Converter="{StaticResource _doubleToVisibilityConverter}"
/>
</ProgressBar.Visibility>
</ProgressBar>和代码:
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;
}
}免责声明:从内存中编写,未编译或测试。
https://stackoverflow.com/questions/6769444
复制相似问题