2009-10-06 19 views
7

डब्ल्यूपीएफ में विन 7 (और मैं विस्टा मानता हूं) पर डिफ़ॉल्ट प्रगति पट्टी अक्षम करता हूं, डिफ़ॉल्ट प्रगति पट्टी एक अच्छी छोटी चमक "जोश" -नी एनीमेशन करता है।डब्ल्यूपीएफ/विंडोज 7: डिफ़ॉल्ट प्रगति बार चमक एनीमेशन

मैं एक स्क्रीन पर लगभग 48 चीजों की प्रगति दिखा रहा हूं, और इन सभी चीजों को आप पर ध्यान देने के लिए जबरदस्त जबरदस्त है - क्या आप एप्लिकेशन में शेष डिफ़ॉल्ट एनिमेशन को प्रभावित किए बिना इन एनिमेशन को अक्षम कर सकते हैं?

+11

@ मैथ्यू, 48 प्रगति सलाखों को दिखाने में क्या गलत है? क्या आपने एक हवाई जहाज कॉकपिट देखा है? या मौसम आदमी के डैशबोर्ड? या किसी भी सीएनसी मशीन के डैशबोर्ड? प्रत्येक ऐप केवल प्रोग्रामर के लिए नहीं है और केवल इसके लिए प्रबंधकों के लिए है, मुझे लगता है कि उत्तर प्रश्न के लिए प्रासंगिक होना चाहिए, बल्कि व्यक्ति को अपना डिजाइन बदलने के लिए कहना चाहिए, वह अपना काम कर रहा है और उसने सवाल नहीं पूछा है कि 48 प्रगति करना अच्छा है सलाखों? –

+5

@ मैथ्यू, इस एप्लिकेशन में 48 प्रगति बार उचित हैं, क्योंकि यह 48 उपकरणों के बारे में जानकारी प्रदर्शित करता है जिन्हें वास्तविक समय में शारीरिक रूप से निगरानी की जा रही है। अगर मैं एक LOB ऐप या कुछ था तो मैं आपसे सहमत हूं। – Brandon

उत्तर

4

मैं मैथ्यू की टिप्पणी से सहमत हूं, लेकिन फिर भी, आपका जवाब एनीमेशन के बिना एक कस्टम शैली लागू करना है।

<Style x:Key="{x:Type ProgressBar}" TargetType="{x:Type ProgressBar}"> 
    <Style.Triggers> 
     <Trigger Property="Orientation" Value="Vertical"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ProgressBar}"> 
         <Border Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="3" SnapsToDevicePixels="true"> 
          <Border BorderThickness="1,1,1,0" BorderBrush="#BEBEBE" CornerRadius="2"> 
           <Border BorderThickness="1" BorderBrush="#EFEFEF" CornerRadius="1"> 
            <DockPanel Name="PART_Track" Margin="0,0,0,1" LastChildFill="false"> 
             <Decorator Name="PART_Indicator" Dock="Bottom"> 
              <Rectangle LayoutTransform="{RotateTransform Angle=-90}"> 
               <Rectangle.Fill> 
                <MultiBinding Converter="{theme:ProgressBarBrushConverter}"> 
                 <Binding Path="Foreground" RelativeSource="{RelativeSource TemplatedParent}" /> 
                 <Binding Path="IsIndeterminate" RelativeSource="{RelativeSource TemplatedParent}" /> 
                 <Binding Path="ActualHeight" ElementName="PART_Indicator" /> 
                 <Binding Path="ActualWidth" ElementName="PART_Indicator" /> 
                 <Binding Path="ActualHeight" ElementName="PART_Track" /> 
                </MultiBinding> 
               </Rectangle.Fill> 
              </Rectangle> 
             </Decorator> 
            </DockPanel> 
           </Border> 
          </Border> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
    </Style.Triggers> 
    <Setter Property="Foreground" Value="{StaticResource [0] Ñ}" /> 
    <Setter Property="Background" Value="{DynamicResource {x:Static WindowBrush}}" /> 
    <Setter Property="BorderBrush" Value="#686868" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ProgressBar}"> 
       <Border Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="3" SnapsToDevicePixels="true"> 
        <Border BorderThickness="1,1,1,0" BorderBrush="#BEBEBE" CornerRadius="2"> 
         <Border BorderThickness="1" BorderBrush="#EFEFEF" CornerRadius="1"> 
          <DockPanel Name="PART_Track" Margin="1,0,0,1" LastChildFill="false"> 
           <Rectangle Name="PART_Indicator"> 
            <Rectangle.Fill> 
             <MultiBinding Converter="{theme:ProgressBarBrushConverter}"> 
              <Binding Path="Foreground" RelativeSource="{RelativeSource TemplatedParent}" /> 
              <Binding Path="IsIndeterminate" RelativeSource="{RelativeSource TemplatedParent}" /> 
              <Binding Path="ActualWidth" ElementName="PART_Indicator" /> 
              <Binding Path="ActualHeight" ElementName="PART_Indicator" /> 
              <Binding Path="ActualWidth" ElementName="PART_Track" /> 
             </MultiBinding> 
            </Rectangle.Fill> 
           </Rectangle> 
          </DockPanel> 
         </Border> 
        </Border> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

और कनवर्टर वर्ग:

public class ProgressBarBrushConverter : IMultiValueConverter 
{ 
// Methods 
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
{ 
    Type type = typeof(double); 
    if (((((values == null) || (values.Length != 5)) || ((values[0] == null) || (values[1] == null))) || (((values[2] == null) || (values[3] == null)) || ((values[4] == null) || !typeof(Brush).IsAssignableFrom(values[0].GetType())))) || ((!typeof(bool).IsAssignableFrom(values[1].GetType()) || !type.IsAssignableFrom(values[2].GetType())) || (!type.IsAssignableFrom(values[3].GetType()) || !type.IsAssignableFrom(values[4].GetType())))) 
    { 
     return null; 
    } 
    Brush brush = (Brush) values[0]; 
    bool flag = (bool) values[1]; 
    double d = (double) values[2]; 
    double num2 = (double) values[3]; 
    double num3 = (double) values[4]; 
    if ((((d <= 0.0) || double.IsInfinity(d)) || (double.IsNaN(d) || (num2 <= 0.0))) || (double.IsInfinity(num2) || double.IsNaN(num2))) 
    { 
     return null; 
    } 
    DrawingBrush brush2 = new DrawingBrush(); 
    brush2.Viewport = brush2.Viewbox = new Rect(0.0, 0.0, d, num2); 
    brush2.ViewportUnits = brush2.ViewboxUnits = BrushMappingMode.Absolute; 
    brush2.TileMode = TileMode.None; 
    brush2.Stretch = Stretch.None; 
    DrawingGroup group = new DrawingGroup(); 
    DrawingContext context = group.Open(); 
    double x = 0.0; 
    double width = 6.0; 
    double num6 = 2.0; 
    double num7 = width + num6; 
    if (flag) 
    { 
     int num8 = (int) Math.Ceiling((double) (d/num7)); 
     double num9 = -num8 * num7; 
     double num10 = d * 0.3; 
     brush2.Viewport = brush2.Viewbox = new Rect(num9, 0.0, num10 - num9, num2); 
     TranslateTransform transform = new TranslateTransform(); 
     double num11 = num8 * 100; 
     DoubleAnimationUsingKeyFrames animation = new DoubleAnimationUsingKeyFrames(); 
     animation.Duration = new Duration(TimeSpan.FromMilliseconds(num11)); 
     animation.RepeatBehavior = RepeatBehavior.Forever; 
     for (int i = 1; i <= num8; i++) 
     { 
      double num13 = i * num7; 
      animation.KeyFrames.Add(new DiscreteDoubleKeyFrame(num13, KeyTime.Uniform)); 
     } 
     transform.BeginAnimation(TranslateTransform.XProperty, animation); 
     brush2.Transform = transform; 
     while ((x + width) < num10) 
     { 
      context.DrawRectangle(brush, null, new Rect(num9 + x, 0.0, width, num2)); 
      x += num7; 
     } 
     d = num10; 
     x = 0.0; 
    } 
    while ((x + width) < d) 
    { 
     context.DrawRectangle(brush, null, new Rect(x, 0.0, width, num2)); 
     x += num7; 
    } 
    double num14 = d - x; 
    if ((!flag && (num14 > 0.0)) && (Math.Abs((double) (d - num3)) < 1E-05)) 
    { 
     context.DrawRectangle(brush, null, new Rect(x, 0.0, num14, num2)); 
    } 
    context.Close(); 
    brush2.Drawing = group; 
    return brush2; 
} 

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

क्या किसी ने वास्तव में इसका सफलतापूर्वक उपयोग किया है? मैं उपरोक्त शैली को संकलित करने के लिए भी नहीं मिल सकता। –

3

तुम भी इस आशय Win7 में सब एक साथ निष्क्रिय कर सकते हैं यहाँ मूल शैली (परावर्तक के माध्यम से), आप निकाल सकते हैं/ट्वीक/जो कुछ भी है।

डेस्कटॉप पर मेरा कंप्यूटर आइकन पर राइट-क्लिक करें और गुण चुनें (या विंडोज कुंजी + पॉज़/ब्रेक कुंजी दबाएं), बाएं तरफ फलक में उन्नत सिस्टम सेटिंग्स लिंक पर क्लिक करें (आप इसे sysdm.cpl टाइप करके भी खोल सकते हैं मेनू खोज बॉक्स चलाएं या शुरू करें और एंटर दबाएं)। अब प्रदर्शन अनुभाग में सेटिंग्स बटन पर क्लिक करें:

"विंडोज़ के अंदर नियंत्रण और तत्वों को एनिमेट करें" अनचेक करें, यह पहला चयन होना चाहिए।

+0

धन्यवाद, इस विशेष मामले में यह केवल एप्लिकेशन तक ही सीमित होना चाहिए (वैश्विक ओएस थीम परिवर्तन पर भरोसा नहीं करना चाहते हैं), लेकिन अच्छी जानकारी – Brandon

6

सरल, गैर-एनिमेटेड प्रगति पट्टी को दो भरे आयताकारों के साथ ग्रिड के रूप में लिखा जा सकता है: बाएं एक को भूरे रंग के साथ हरे रंग के रंग के साथ भर दिया जाएगा।

ग्रिड में दो कॉलम परिभाषाएं होंगी।

दोनों की चौड़ाई बदलने से प्रगति में परिवर्तन का असर पड़ेगा।

10

रॉबर्ट के जवाब मजबूत है। यहाँ एक हैक है (क्योंकि यह तत्व यह है कि चमक करता है, जो एक कार्यान्वयन विस्तार है और बाद में एक संस्करण में परिवर्तित हो सकता है की आंतरिक नाम पर निर्भर करता है):

void SetGlowVisibility(ProgressBar progressBar, Visibility visibility) { 
    var glow = progressBar.Template.FindName("PART_GlowRect", progressBar) as FrameworkElement; 
    if (glow != null) glow.Visibility = visibility; 
} 

कैसे एक प्रगति बार परिवर्तन लागू किया जाता है तो , यह हैक काम करना बंद कर सकता है।

दूसरी ओर, एक समाधान जो पूरी तरह से एक्सएएमएल और शैलियों को प्रतिस्थापित करता है, रंगों, सीमाओं आदि को लॉक-इन और ठीक कर सकता है और भविष्य में प्रगतिबार के नए संस्करण में जोड़ा जा सकता है ...

0

आपके द्वारा उपयोग किए जा रहे एप्लिकेशन के लिए शॉर्टकट बनाएं, शॉर्टकट पर राइट क्लिक करें और गुण चुनें। अब संगतता टैब में "दृश्य दृश्य थीम अक्षम करें" चेकबॉक्स पर क्लिक करें।

+0

यह एप्लिकेशन में अन्य एनिमेशन को प्रभावित करेगी –

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