ProgressBar لا تحديث على التغيير إلى الحد الأقصى من خلال الربط

StackOverflow https://stackoverflow.com/questions/655780

  •  19-08-2019
  •  | 
  •  

سؤال

<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}}" />

وهذا ما يبدو لي progressbar مثل في الوقت الراهن. جاء النمط من http://mattserbinski.com/blog/look-and-feel- progressbar وDebuggingConverter هو تحويل أي المرجع الذي يطبع قيمة ونوع والمعلمة إلى وحدة التحكم. لقد التحقق من أن تحويل لأقصى يتم استدعاؤها عند تغيير ملكيتي NumTubes.

وأساسا، فإن ProgressBar لا إعادة رسم حتى يتغير القيمة. لذلك، إذا كان لدي 2 أنابيب وفشل 1، حتى لو كنت إضافة 20 الأنابيب أكثر من ذلك، لا يزال شغل شريط نصف حتى يتغير NumFailed، ثم يتم تحديث نسبة. لقد حاولت مضيفا الإخطارات زائفة للممتلكات NumFailed، ولكن ذلك على ما يبدو لا يعمل منذ القيمة لم تتغير.

والأفكار؟

هل كانت مفيدة؟

المحلول

ويبدو ان يحسب حجم شريط في ProgressBar.SetProgressBarIndicatorLength طريقة خاصة. انه دعا فقط من OnValueChanged، OnTrackSizeChanged، وOnIsIndeterminateChanged.

هل يمكن تسمية SetProgressBarIndicatorLength من خلال التفكير، أو دورة واحدة من الخصائص التي أسباب ذلك ليتم استدعاؤها. هذا هو عرجاء، ولكنها لا تبدو وكأنها ProgressBar تم تصميمه بحيث يتم تغيير Maximum وMinimum في منتصف التقدم.

وبغض النظر عن الطريقة التي تختارها، يمكنك معرفة متى التغييرات الملكية Maximum باستخدام <لأ href = "http://msdn.microsoft.com/en-us/library/system.componentmodel.dependencypropertydescriptor.addvaluechanged. ASPX "يختلط =" نوفولو noreferrer "> DependencyPropertyDescriptor.AddValueChanged :

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

نصائح أخرى

وكنت تجد صعوبة في الحصول على الحل هنا للعمل، ولكنني وجدت عمل آخر حولها. أن شريط التقدم المحرز في بلدي يتم تحديث كما غيرت مصدر بيانات من وجوه بلدي (11 من 11 من شأنه أن يغير إلى 10 من 10 وتجميد شريط التقدم)، وأدركت أنني لم أكن بحاجة لتحديث القيمة القصوى على الإطلاق.

وبدلا من ذلك أنا استخدم المحول على القيمة إلى تحويله إلى في المئة، ومجموعة بلدي كحد أقصى في 100. ونتيجة تعرض نفسها، ولكن من دون علة لتغيير القيمة القصوى.

public class CreatureStaminaConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var creature = (CreatureBase.CreatureEntityData) value;
        double max = creature.entityData.MaxStat;
        return creature.CurrentStamina/max*100;
    }

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

 <ProgressBar Name="rpbStamina" Minimum="0" Maximum="100" Value="{Binding entityData, Converter={StaticResource CreatureStaminaConverter}}" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top