gpt4 book ai didi

wpf - ProgressBar 不更新通过绑定(bind)更改为 Maximum

转载 作者:行者123 更新时间:2023-12-01 11:10:22 25 4
gpt4 key购买 nike

<ProgressBar Foreground="Red"
Background="Transparent"
Value="{Binding NumFailed, Mode=OneWay}"
Minimum="0"
Maximum="{Binding NumTubes, Mode=OneWay, Converter={x:Static wpftools:DebuggingConverter.Instance}, ConverterParameter=Failedprogressbar}"
FlowDirection="RightToLeft"
Style="{DynamicResource {x:Static wpftools:CustomResources.StyleProgressBarVistaKey}}" />

这就是我的进度条目前的样子。样式来自http://mattserbinski.com/blog/look-and-feel-progressbar DebuggingConverter 是一个空操作转换器,它将值、类型和参数打印到控制台。我已验证在我的 NumTubes 属性更改时正在调用 Maximum 的转换器。

基本上,ProgressBar 在 Value 改变之前不会重绘。所以,如果我有 2 个 pipe 并且 1 个失败了,即使我再添加 20 个 pipe ,在 NumFailed 发生变化之前,该条仍然是半满的,然后更新比例。我试过添加 NumFailed 属性的虚假通知,但这显然不起作用,因为值没有改变。

想法?

最佳答案

看起来条形大小是在私有(private)方法 ProgressBar.SetProgressBarIndicatorLength 中计算的。它仅在 OnValueChangedOnTrackSizeChangedOnIsIndeterminateChanged 中调用。

您可以通过反射调用 SetProgressBarIndicatorLength,或者循环调用导致它被调用的属性之一。这是蹩脚的,但它看起来不像 ProgressBar 被设计成 MaximumMinimum 会在中间过程中改变。

无论您选择哪种方法,您都可以使用 DependencyPropertyDescriptor.AddValueChanged 确定 Maximum 属性何时更改。 :

DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(ProgressBar.MaximumProperty, typeof(ProgressBar)));
if (dpd != null)
{
dpd.AddValueChanged(myProgressBar, delegate
{
// handle Maximum changes here
});
}

关于wpf - ProgressBar 不更新通过绑定(bind)更改为 Maximum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/655780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com