سؤال

قد يكون هذا عدم التفكير في WPF مدعو ، ولكن أود أن أعرف إذا كان هناك طريقة بسيطة لوضع النص على WPF ProgressBar.لي فارغة شريط التقدم تبدو عارية.أن شاشة العقارات التي يمكن أن تحمل رسالة حول ما هو في التقدم ، أو حتى مجرد إضافة أرقام إلى التمثيل.الآن, WPF هو كل شيء عن حاويات امتداد وأنا ببطء التفاف ذهني حول ذلك ، ولكن منذ أنا لا انظر "نص" أو "المحتوى" الملكية, أنا أفكر في أن تضيف شيئا إلى الحاوية التي هو شريط التقدم.هل هناك أسلوب أو اثنين هناك أكثر طبيعية من بلدي الأصلي WinForms النبضات ؟ ما هو أفضل WPF-الطريقة الطبيعية لإضافة نص إلى أن التقدم البار ؟

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

المحلول

إذا كنت بحاجة إلى القابل لإعادة الاستخدام طريقة إضافة نص ، يمكنك إنشاء نمط جديد/ControlTemplate الذي إضافية TextBlock لعرض النص.يمكنك خطف TextSearch.النص المرفق خاصية تحديد النص على شريط التقدم.

إذا كان لا تحتاج إلى أن تكون قابلة لإعادة الاستخدام ، ببساطة شريط التقدم في الشبكة إضافة TextBlock إلى الشبكة.منذ WPF يمكن أن يؤلف العناصر معا ، هذا سوف تعمل بشكل جيد.

إذا كنت تريد, يمكنك إنشاء UserControl أن يعرض ProgressBar و TextBlock كما الممتلكات العامة ، لذلك سيكون العمل أقل من إنشاء مخصص ControlTemplate.

نصائح أخرى

سواء من قبل الردود (خلق جديد CustomControl أو Adorner) أفضل الممارسات ، ولكن إذا كنت ترغب فقط سريعة وقذرة (أو لفهم بصريا كيفية القيام بذلك) ثم هذا الرمز سوف تعمل:

<Grid Width="300" Height="50">  
   <ProgressBar Value="50" />
   <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
      My Text
   </TextBlock>
</Grid>

فقط نأخذ في الاعتبار أن z-index هو آخر بند من البنود المذكورة سوف تكون على القمة.

أيضا, إذا كنت لا تملك Kaxaml بعد تأكد لاستلامه - هو اللعب مع XAML عندما كنت في محاولة لمعرفة الامور.

وهذا يمكن أن تكون بسيطة جدا (ما لم يكن هناك الكثير من الطرق للحصول على هذا العمل).

هل يمكن استخدام Style للحصول على هذا عمله أو فقط تراكب TextBlock و ProgressBar.

أنا شخصيا استخدم هذا لإظهار نسبة التقدم عندما تنتظر الإنجاز.

للحفاظ على أنها بسيطة جدا أردت فقط أن يكون واحد Binding فقط ، لذا تعلق TextBock.Text إلى ProgressBar.Value.

                                           ثم مجرد نسخ رمز الحصول عليها القيام به.

<Grid>
   <ProgressBar Minimum="0" 
                Maximum="100" 
                Value="{Binding InsertBindingHere}" 
                Name="pbStatus" />
   <TextBlock Text="{Binding ElementName=pbStatus, Path=Value, StringFormat={}{0:0}%}" 
           HorizontalAlignment="Center" 
           VerticalAlignment="Center" />
</Grid>

                                                هنا هو كيف يمكن أن تبدو مثل:

                                    enter image description here

تحقق من WPF التعليمي الكامل بعد.

يمكنك استخدام Adorner لعرض النص على أعلى من ذلك.

انظر المقالة MSDN على Adorners

يمكنك إنشاء فئة يرث من Adorner الدرجة.تجاوز OnRender طريقة رسم النص الذي تريده.إذا كنت تريد يمكنك إنشاء تبعية الملكية المخصصة الخاصة بك Adorner الذي يحتوي على النص الذي تريد عرض.ثم تستخدم على سبيل المثال في الرابط ذكرت لإضافة هذا Adorner إلى شريط التقدم هو adorner طبقة.

انقر على الحق ProgressBar, ثم انقر فوق تحرير القالب > تحرير نسخة.

ثم وضع TextBlock كما هو مبين أدناه فقط فوق إغلاق الوسم من Grid في أسلوب الناتجة عن مقابل.

   <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/>
   <TextBlock Background="Transparent" Text="work in progress" Foreground="Black" TextAlignment="Center"/>
 </Grid>
 <ControlTemplate.Triggers>

ProgressBar مع نص ملزم من 2 خصائص ( القيمة القصوى القيمة ):

<Grid>
    <ProgressBar Name="pbUsrLvl"
                 Minimum="1" 
                 Maximum="99" 
                 Value="59" 
                 Margin="5"  
                 Height="24"  Foreground="#FF62FF7F"/>
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock.Text>
            <MultiBinding StringFormat="{}UserLvl:{0}/{1}">
                <Binding Path="Value" ElementName="pbUsrLvl" />
                <Binding Path="Maximum" ElementName="pbUsrLvl" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</Grid>

Rezult:

enter image description here


نفسه ولكن مع ٪ من التقدم :

<Grid>
    <ProgressBar Name="pbLifePassed"
                 Minimum="0" 
                 Value="59" 
                 Maximum="100"
                 Margin="5" Height="24" Foreground="#FF62FF7F"/>
    <TextBlock Text="{Binding ElementName=pbLifePassed, Path=Value, StringFormat={}{0:0}%}" 
           HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>

enter image description here

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top