2011-04-19 7 views
5

मैं एक नेट ऊर्ध्वाधर प्रगति बार अनुकूलित करने के लिए कोशिश (दृश्य 2010 का उपयोग), निम्न कोड के साथ:कार्यक्षेत्र प्रगति बार टेम्पलेट .net

<ProgressBar Name="VolumeMeter" Orientation="Vertical" Margin="4,30,0,0" Value="50" HorizontalAlignment="Left" VerticalAlignment="Top" Height="300" Width="10"> 
     <ProgressBar.Template> 
      <ControlTemplate TargetType="ProgressBar"> 
       <Border BorderBrush="Green" BorderThickness="1"> 
        <Grid Name="PART_Track" Background="Red"> 
         <Rectangle Name="PART_Indicator" Fill="Blue"/>        
        </Grid> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="Orientation" Value="Horizontal"> 
         <Setter TargetName="PART_Indicator" Property="VerticalAlignment" Value="Stretch"/> 
         <Setter TargetName="PART_Indicator" Property="HorizontalAlignment" Value="Left"/> 
        </Trigger> 
        <Trigger Property="Orientation" Value="Vertical"> 
         <Setter TargetName="PART_Indicator" Property="VerticalAlignment" Value="Bottom"/> 
         <Setter TargetName="PART_Indicator" Property="HorizontalAlignment" Value="Stretch"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </ProgressBar.Template> 
    </ProgressBar> 

लेकिन, यह नहीं करता है प्रगति दिखाने के लिए, क्या गलत है?

+0

WPF:

यह करने के लिए सही तरीका अब निम्नलिखित की तरह कुछ है? Silverlight? –

+0

@Will: यह इस समय समस्या नहीं है। :) मुख्य संकेत "विजुअल 2010 का उपयोग" था। –

+0

@ ग्रेगडी: ओह, मैंने सोचा कि मैं एक अप्रचलित टिप्पणी को साफ़ कर रहा था। अंतर मत देखो। अब अपना जवाब पढ़ रहे हैं ... – Will

उत्तर

1

आपके xaml से, ऐसा लगता है कि आप इसे किसी भी चीज़ से बाध्य नहीं कर रहे हैं। आपके पास कुछ ऐसा होना है जो प्रगति को अद्यतन करने के लिए कहता है, आमतौर पर आप इसे अपने डेटामैडल पर कुछ जोड़ देंगे, या आपके कोडबेंड में कुछ विधि है जो ऐसा करता है।

+0

ये, हम सब एक समय या दूसरे में युवा और अनुभवहीन रहे हैं। हम उसके खिलाफ नहीं पकड़ते :) –

+0

नरक संख्या। धागे के बारे में सीखना मार्ग की संस्कार की तरह है। लगभग अपने गले में दाखलताओं को बांधने और बांस टावर को कूदने के रूप में उतना ही बुरा। – Will

+1

यह डब्ल्यूपीएफ है। मैं VolumeMeter.Value = XX का उपयोग करके कोडबेइंड से मान अपडेट कर रहा हूं, लेकिन, बिल्कुल उसी टेम्पलेट के साथ, अगर मैं ओरिएंटेशन = "क्षैतिज" डालता हूं और चौड़ाई मानों से ऊंचाई को स्वैप करता हूं, तो यह काम करता है .... – Christian

0

कुछ की तरह: <Grid Height="{Binding CurrentValue}" VerticalAlignment="Bottom">

13

समस्या आप में चल रहा हो सकता है नेट 4.0 में एक तोड़ने परिवर्तन WPF ProgressBar नियंत्रण के प्रदर्शन में सुधार करने के प्रयासों का परिणाम है कि का परिणाम है। (कुछ ऐसा है, जिसे स्वीकार्य रूप से, इसे बुरी तरह की आवश्यकता है।) http://connect.microsoft.com/VisualStudio/feedback/details/571674/issue-with-vertical-progress-bar-on-4-0-framework

लघु संस्करण: .NET 3.5 और इससे पहले, आप प्रगति पट्टी को लेखक बना सकते हैं और यह अपने आप पर लंबवत या क्षैतिज अभिविन्यास के लिए समायोजित करने के लिए पर्याप्त स्मार्ट था। .NET 4.0 में, आप लेखक को अपनी प्रगति पट्टी को क्षैतिज मानते हैं, फिर एक ट्रिगर का उपयोग करें और अभिविन्यास लंबवत होने पर इसे लंबवत अभिविन्यास में घुमाने के लिए परिवर्तित करें। यदि आप .NET 4.0 (जो मुझे संदेह है कि आप हैं) का उपयोग कर रहे हैं, तो यही कारण है कि आप अपनी प्रगति पट्टी को जिस तरह से उम्मीद करते हैं, उससे व्यवहार करना असंभव है।

अफसोस की बात है, यह बहुत एमएसडीएन में खराब दस्तावेज है। यह उल्लेखनीय है कि http://msdn.microsoft.com/en-us/library/ms750638.aspx पर उदाहरण इसका उल्लेख नहीं करता है, या इसे किसी भी तरह से संबोधित करता है। इसी तरह, प्रोग्रेसबार दस्तावेज स्वयं (http://msdn.microsoft.com/en-us/library/system.windows.controls.progressbar.aspx) प्रस्तुति नींव के पूर्व संस्करणों से इस ब्रेकिंग परिवर्तन को दस्तावेज नहीं करता है। प्रस्तुत की गई बग के लिए भलाई का शुक्र है, या मैं (भी) सोचा होगा कि मैं पागल हो जाऊंगा।

<ControlTemplate TargetType="ProgressBar"> 

    <Border x:Name="Root"> 
    <!-- Visual tree goes here, be sure to include PART_Indicator and PART_Track --> 
    </Border> 

    <!-- Triggers must come after the Visual Tree so we can reference names. --> 
    <ControlTemplate.Triggers> 
    <Trigger Property="Orientation" Value="Vertical"> 

     <!-- Rotate the progressbar so the left edge is the bottom edge --> 
     <Setter TargetName="Root" Property="LayoutTransform"> 
     <Setter.Value> 
      <RotateTransform Angle="270" /> 
     </Setter.Value> 
     </Setter> 

     <!-- 
     Fix the render dimensions b/c what was the width is now height and vice-versa. 
     Note that we have to use {RelativeSource TemplatedParent} b/c {TemplateBinding} 
     can't be used in a setter's value. 
     --> 
     <Setter TargetName="Root" Property="Width" 
     Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}" 
     /> 
     <Setter TargetName="Root" Property="Height" 
     Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Width}" 
     /> 
    </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+1

ओह, यह एक बुरा तोड़ने वाला बदलाव है। – Will

+1

यह अद्भुत काम करता है! +1 – DanielB

+0

दुर्भाग्य से यदि आप प्रारंभ और अंत बिंदुओं को फ़्लिप करने के लिए याद नहीं रखते हैं तो यह आपके भरने ढाल पर विनाश को खत्म कर सकता है। – erodewald