2010-05-31 70 views
1

我在玩Silverlight應用程序中的進度條自定義。我想要達到的是讓進度條標籤以下列格式顯示其狀態: 「值/最大值」。所以,用戶會看到什麼是當前值,什麼是最大可能值。下面是我用進度條樣式:通過綁定自定義進度條標籤文本

<Style x:Key="ProgressBarStyle" TargetType="ProgressBar"> 
     <Setter Property="Width" Value="97.21" /> 
     <Setter Property="Height" Value="19" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ProgressBar"> 
        <Canvas x:Name="LevelField" Width="99" Height="21"> 
         ... 
        <TextBlock ... DataContext="{TemplateBinding Value}" Text="{Binding Converter={StaticResource DecNumberToStringConverter}}"/> 
        </Canvas> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

我想實現這一點的方法,是有一個價值轉換,將轉換成電流值和最大可能爲正確的琴絃。如果它的寫法如上所述,它確實工作正常。不過,我也需要爲轉換器提供ConverterParameter,但不知道如何製作它。當我這樣寫時:ConvertParameter = {綁定最大值},它顯示開始時的錯誤,在TextBlock中找不到Text屬性。我也試圖將DataContext設置爲{RelativeSource Self},但它沒有顯示DataContext屬性未找到的錯誤。

如何使所描述的進度欄標籤正確?

回答

0

好吧,好像我找到了一種方法。這不是最好的,但如果你不需要一個通用的解決方案,它就可以工作。所以,我所做的只是創建多個進度條樣式,然後在每種類型的進度條中將其類型指定爲轉換器的字符串參數。

然後在轉換器中(對於所有進度條,這個保持不變)我檢查參數,並使用常數或直接請求進度條的最大值來指定該工具欄的最大數量。

雖然,仍然很想聽到一個通用的解決方案。

0

嘗試將TextBox綁定到父級,然後您的值轉換器可以訪問Value和Maximum。 {Binding RelativeSource={RelativeSource TemplatedParent}}

然後您的值轉換器可以將對象轉換爲ProgressBar並直接使用這些值。