2009-12-09 19 views
7

मैं WPF की प्रगति पट्टी का उपयोग कर रहा हूं और अधिकतम मान तक मान सेट कर रहा हूं। लेकिन, जब पहुंच गया, एनीमेशन (वह हरा प्रभाव है) जारी है।WPF प्रोग्रेसबार एनीमेशन जारी रखें

मैं इसे कैसे रोक सकता हूं और बिना किसी एनीमेशन के पूर्ण ग्रीन बार कैसे प्राप्त कर सकता हूं?

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded"> 
    <Grid> 
     <ProgressBar Height="30" Name="progressBar1" VerticalAlignment="Top" Minimum="0" Maximum="100" /> 
    </Grid> 
</Window> 

और:

उदाहरण के लिए, इस ले

public partial class Window1 : Window 
{ 
    private double _min; 
    private double _max; 

    public Window1() 
    { 
     InitializeComponent(); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     _min = progressBar1.Minimum; 
     _max = progressBar1.Maximum; 
     Thread thread = new Thread(Start); 
     thread.Start(); 
    } 

    private void Start() 
    { 
     for (double i = _min; i <= _max; i++) 
     { 
      Thread.Sleep(50); 
      double value = i; 
      Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => progressBar1.Value = value)); 
     } 
    } 
} 

जब धागा समाप्त हो गया है, मैं हमेशा प्रगति बार पर एनीमेशन (हरी पट्टी पर सफेद प्रभाव) देख सकते हैं

आपकी मदद

उत्तर

2

के लिए अग्रिम धन्यवाद मैं पूरी तरह यकीन नहीं है क्या यो आपका मतलब है, लेकिन शायद आपको जो भी चाहिए वह प्रोग्रेसबार की आईएसआईंडेटर्मनेट संपत्ति को झूठी पर सेट करना है। अगर यह काम नहीं करता है, तो कृपया हमें आगे मदद करने के लिए कुछ कोड दें!

संपादित करें: एनीमेशन विंडोज एयरो शैली का हिस्सा है और कुछ डिजाइनर को बड़ी रकम का भुगतान किया गया था ... इसे भूल गए! तो आप किसी संपत्ति का उपयोग करके एनीमेशन को आसानी से हटा नहीं सकते हैं। आप मौजूदा प्रोग्रेसबर्स की दृश्य उपस्थिति को अपने नियंत्रण टेम्पलेट को संपादित करके बदल सकते हैं। नीचे WPF प्रोग्रेसबार का संपूर्ण नियंत्रण है। मन: आपको सभी संसाधनों की आवश्यकता है, xmlns Window.Themes के संदर्भ में है और आपको प्रेजेंटेशनफ्रामवर्क.एरो डीएलएल का संदर्भ सेट करना होगा। मैंने एक टिप्पणी डाली जहां आप परिवर्तन कर सकते हैं। दूसरे और तीसरे ढाल पर रंग FF000000 00000000 रंग बदलें और सफेद चमक गायब हो जाती है। मैंने एक ट्रिगर को लागू करने का प्रयास किया जो पहले एनीमेशन दिखाएगा, लेकिन वैल्यू == अधिकतम होने पर इसे रोकता है, लेकिन मैं असफल रहा। कोई और?

<Window x:Class="BlandProgressBarSpike.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" 
    Title="Window1" Height="300" Width="300" 
    Loaded="Window_Loaded"> 
    <Window.Resources> 
     <LinearGradientBrush x:Key="ProgressBarBackground" EndPoint="1,0" StartPoint="0,0"> 
      <GradientStop Color="#BABABA" Offset="0"/> 
      <GradientStop Color="#C7C7C7" Offset="0.5"/> 
      <GradientStop Color="#BABABA" Offset="1"/> 
     </LinearGradientBrush> 
     <LinearGradientBrush x:Key="ProgressBarBorderBrush" EndPoint="0,1" StartPoint="0,0"> 
      <GradientStop Color="#B2B2B2" Offset="0"/> 
      <GradientStop Color="#8C8C8C" Offset="1"/> 
     </LinearGradientBrush> 
     <LinearGradientBrush x:Key="ProgressBarGlassyHighlight" EndPoint="0,1" StartPoint="0,0"> 
      <GradientStop Color="#50FFFFFF" Offset="0.5385"/> 
      <GradientStop Color="#00FFFFFF" Offset="0.5385"/> 
     </LinearGradientBrush> 
     <LinearGradientBrush x:Key="ProgressBarTopHighlight" EndPoint="0,1" StartPoint="0,0"> 
      <GradientStop Color="#80FFFFFF" Offset="0.05"/> 
      <GradientStop Color="#00FFFFFF" Offset="0.25"/> 
     </LinearGradientBrush> 
     <!-- This produces the whitish,moving glow--> 
     <LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill" EndPoint="0,0" StartPoint="-100,0" MappingMode="Absolute"> 
      <GradientStop Color="#00000000" Offset="0"/> 
      <GradientStop Color="#FF000000" Offset="0.4"/> 
      <GradientStop Color="#FF000000" Offset="0.6"/> 
      <GradientStop Color="#00000000" Offset="1"/> 
     </LinearGradientBrush> 
     <LinearGradientBrush x:Key="ProgressBarIndicatorDarkEdgeLeft" EndPoint="1,0" StartPoint="0,0"> 
      <GradientStop Color="#0C000000" Offset="0"/> 
      <GradientStop Color="#20000000" Offset="0.3"/> 
      <GradientStop Color="#00000000" Offset="1"/> 
     </LinearGradientBrush> 
     <LinearGradientBrush x:Key="ProgressBarIndicatorDarkEdgeRight" EndPoint="1,0" StartPoint="0,0"> 
      <GradientStop Color="#00000000" Offset="0"/> 
      <GradientStop Color="#20000000" Offset="0.7"/> 
      <GradientStop Color="#0C000000" Offset="1"/> 
     </LinearGradientBrush> 
     <RadialGradientBrush x:Key="ProgressBarIndicatorLightingEffectLeft" RelativeTransform="1,0,0,1,0.5,0.5" RadiusX="1" RadiusY="1"> 
      <GradientStop Color="#60FFFFC4" Offset="0"/> 
      <GradientStop Color="#00FFFFC4" Offset="1"/> 
     </RadialGradientBrush> 
     <LinearGradientBrush x:Key="ProgressBarIndicatorLightingEffect" EndPoint="0,0" StartPoint="0,1"> 
      <GradientStop Color="#60FFFFC4" Offset="0"/> 
      <GradientStop Color="#00FFFFC4" Offset="1"/> 
     </LinearGradientBrush> 
     <RadialGradientBrush x:Key="ProgressBarIndicatorLightingEffectRight" RelativeTransform="1,0,0,1,-0.5,0.5" RadiusX="1" RadiusY="1"> 
      <GradientStop Color="#60FFFFC4" Offset="0"/> 
      <GradientStop Color="#00FFFFC4" Offset="1"/> 
     </RadialGradientBrush> 
     <LinearGradientBrush x:Key="ProgressBarIndicatorGlassyHighlight" EndPoint="0,1" StartPoint="0,0"> 
      <GradientStop Color="#90FFFFFF" Offset="0.5385"/> 
      <GradientStop Color="#00FFFFFF" Offset="0.5385"/> 
     </LinearGradientBrush> 
     <Style x:Key="BlandStyle" TargetType="{x:Type ProgressBar}"> 
      <Setter Property="Foreground" Value="#01D328"/> 
      <Setter Property="Background" Value="{StaticResource ProgressBarBackground}"/> 
      <Setter Property="BorderBrush" Value="{StaticResource ProgressBarBorderBrush}"/> 
      <Setter Property="BorderThickness" Value="1"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ProgressBar}"> 
         <Grid SnapsToDevicePixels="true" x:Name="Background"> 
          <Rectangle Fill="{TemplateBinding Background}" RadiusX="2" RadiusY="2"/> 
          <Border Margin="1" Background="{StaticResource ProgressBarGlassyHighlight}" CornerRadius="2"/> 
          <Border Margin="1" Background="{StaticResource ProgressBarTopHighlight}" BorderBrush="#80FFFFFF" BorderThickness="1,0,1,1"/> 
          <Rectangle Margin="1" x:Name="PART_Track"/> 
          <Decorator HorizontalAlignment="Left" Margin="1" x:Name="PART_Indicator"> 
           <Grid x:Name="Foreground"> 
            <Grid.RowDefinitions> 
             <RowDefinition/> 
             <RowDefinition/> 
            </Grid.RowDefinitions> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition MaxWidth="15"/> 
             <ColumnDefinition Width="0.1*"/> 
             <ColumnDefinition MaxWidth="15"/> 
            </Grid.ColumnDefinitions> 
            <Rectangle x:Name="Indicator" Fill="{TemplateBinding Foreground}" Grid.ColumnSpan="3" Grid.RowSpan="2"/> 
            <Rectangle x:Name="Animation" Fill="{TemplateBinding Foreground}" Grid.ColumnSpan="3" Grid.RowSpan="2"> 
             <Rectangle.OpacityMask> 
              <MultiBinding> 
               <MultiBinding.Converter> 
                <Microsoft_Windows_Themes:ProgressBarHighlightConverter/> 
               </MultiBinding.Converter> 
               <Binding Source="{StaticResource ProgressBarIndicatorAnimatedFill}"/> 
               <Binding Path="ActualWidth" ElementName="Background"/> 
               <Binding Path="ActualHeight" ElementName="Background"/> 
              </MultiBinding> 
             </Rectangle.OpacityMask> 
            </Rectangle> 
            <Rectangle Margin="1,1,0,1" x:Name="LeftDark" Fill="{StaticResource ProgressBarIndicatorDarkEdgeLeft}" RadiusX="1" RadiusY="1" Grid.RowSpan="2"/> 
            <Rectangle Margin="0,1,1,1" x:Name="RightDark" Fill="{StaticResource ProgressBarIndicatorDarkEdgeRight}" RadiusX="1" RadiusY="1" Grid.Column="2" Grid.RowSpan="2"/> 
            <Rectangle x:Name="LeftLight" Fill="{StaticResource ProgressBarIndicatorLightingEffectLeft}" Grid.Column="0" Grid.Row="2"/> 
            <Rectangle x:Name="CenterLight" Fill="{StaticResource ProgressBarIndicatorLightingEffect}" Grid.Column="1" Grid.Row="2"/> 
            <Rectangle x:Name="RightLight" Fill="{StaticResource ProgressBarIndicatorLightingEffectRight}" Grid.Column="2" Grid.Row="2"/> 
            <Border x:Name="Highlight1" Grid.ColumnSpan="3" Grid.RowSpan="2" Background="{StaticResource ProgressBarIndicatorGlassyHighlight}"/> 
            <Border x:Name="Highlight2" Grid.ColumnSpan="3" Grid.RowSpan="2" Background="{StaticResource ProgressBarTopHighlight}"/> 
           </Grid> 
          </Decorator> 
          <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="Orientation" Value="Vertical"> 
           <Setter Property="LayoutTransform" TargetName="Background"> 
            <Setter.Value> 
             <RotateTransform Angle="-90"/> 
            </Setter.Value> 
           </Setter> 
           <Setter Property="LayoutTransform" TargetName="PART_Track"> 
            <Setter.Value> 
             <RotateTransform Angle="90"/> 
            </Setter.Value> 
           </Setter> 
           <Setter Property="LayoutTransform" TargetName="PART_Indicator"> 
            <Setter.Value> 
             <RotateTransform Angle="90"/> 
            </Setter.Value> 
           </Setter> 
           <Setter Property="LayoutTransform" TargetName="Foreground"> 
            <Setter.Value> 
             <RotateTransform Angle="-90"/> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
          <Trigger Property="IsIndeterminate" Value="true"> 
           <Setter Property="Visibility" TargetName="LeftDark" Value="Collapsed"/> 
           <Setter Property="Visibility" TargetName="RightDark" Value="Collapsed"/> 
           <Setter Property="Visibility" TargetName="LeftLight" Value="Collapsed"/> 
           <Setter Property="Visibility" TargetName="CenterLight" Value="Collapsed"/> 
           <Setter Property="Visibility" TargetName="RightLight" Value="Collapsed"/> 
           <Setter Property="Visibility" TargetName="Indicator" Value="Collapsed"/> 
          </Trigger> 
          <Trigger Property="IsIndeterminate" Value="false"> 
           <Setter Property="Fill" TargetName="Animation" Value="#80B5FFA9"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <StackPanel> 
     <ProgressBar Style="{StaticResource BlandStyle}" Value="{Binding Progress}" Height="30" 
        Minimum="0" Maximum="100"/> 
    </StackPanel>   
</Window> 
+0

IsIndeterminate गलत पर सेट मेरी समस्या हल नहीं होती मैं एक कोड नमूना – Tim

+0

यह एक अच्छा विचार है के साथ संपादित किया है ... मैं एक चाल, बिटमैप के रूप में बार के एक शॉट के लिए इस्तेमाल किया, और छवि के साथ बदलें जब समाप्त हो जाए। उदारता से, लेकिन काम कर रहा है :) – Tim

+0

जब तक प्रगति पट्टी का आकार बदलता नहीं है तो यह एक अच्छा समाधान है! – Dabblernl

0

मुझे लगता है कि विंडोज़ की एक विशेषता हवाई ... सब समय प्रोग्रेस बार इस प्रभाव है, नहीं लगता कि इसे बंद कर दिया जा सकता है ...

1

सहमत है कि "प्रकाश की किरण" एनीमेशन भ्रामक है कुछ उपयोगकर्ताओं के लिए। इसे IsIndeterminate-कार्यक्षमता को नष्ट किए बिना हटाया जा सकता है जो ऊपर डब्स्र्नर्न का उत्तर देता है।

एयरो शैली है कि आप Dabblernl में पा सकते हैं का उपयोग करना: पोस्ट मैं बदले गए:

<Rectangle x:Name="Animation" Fill="{TemplateBinding Foreground}" Grid.ColumnSpan="3" Grid.RowSpan="2"> 
    <Rectangle.OpacityMask> 
    <MultiBinding> 
     <MultiBinding.Converter> 
     <Microsoft_Windows_Themes:ProgressBarHighlightConverter/> 
     </MultiBinding.Converter> 
     <Binding Source="{StaticResource ProgressBarIndicatorAnimatedFill}"/> 
     <Binding Path="ActualWidth" ElementName="Background"/> 
     <Binding Path="ActualHeight" ElementName="Background"/> 
    </MultiBinding> 
    </Rectangle.OpacityMask> 
</Rectangle> 

साथ:

<Rectangle x:Name="Animation" Grid.ColumnSpan="3" Fill="{TemplateBinding Foreground}" Grid.RowSpan="2"> 
    <Rectangle.OpacityMask> 
    <MultiBinding> 
     <MultiBinding.Converter> 
     <converters:ProgressBarHighlightOverrideConverter/> 
     </MultiBinding.Converter> 
     <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value"/> 
     <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Maximum"/> 
     <Binding Source="{StaticResource ProgressBarIndicatorAnimatedFill}"/> 
     <Binding ElementName="Background" Path="ActualWidth"/> 
     <Binding ElementName="Background" Path="ActualHeight"/> 
    </MultiBinding> 
    </Rectangle.OpacityMask> 
</Rectangle> 

... और एक नया MultiConverter कहा:

using System; 
using System.Globalization; 
using System.Windows; 
using System.Windows.Data; 
using Microsoft.Windows.Themes; 

namespace [Your namespace here] 
{ 
    public class ProgressBarHighlightOverrideConverter : IMultiValueConverter 
    { 
    private readonly ProgressBarHighlightConverter converter = new ProgressBarHighlightConverter(); 

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (values[0] == null || values[0] == DependencyProperty.UnsetValue || 
      values[1] == null || values[1] == DependencyProperty.UnsetValue) 
     { 
     return null; 
     } 

     var value = (Double)values[0]; 
     var maximum = (Double)values[1]; 

     return value >= maximum ? null : converter.Convert(new [] {values[2], values[3], values[4]}, targetType, parameter, culture); 
    } 

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

तो मैंने जो प्रभावी ढंग से किया है वह माइक्रोसॉफ्ट की प्रगति है हाइलाइट कनवर्टर जो मेरे पीछे से आता है मूल कनवर्टर अगर और केवल अगर प्रगति पट्टी: एस मान अधिकतम की तुलना में कम है।

संबंधित मुद्दे