2013-03-26 25 views
3

我已經爲進度條添加了動畫。在值=最大值後停止ProgressBar動畫

我試圖在最大填充(每次更改)後停止動畫。基於我需要處理的文件數量,我從後面的代碼生成進度條最大值。

以下是代碼片段我有

<Trigger Property="Value" Value="10"> 
    <Setter Property="Visibility" TargetName="Animation" Value="Collapsed"/> 

</Trigger> 

以上觸發工作時進度的最大值是10,但我的問題是如何更新動態生成這個值的最大值。

請問有人能幫我嗎?

我真的很欣賞你的時間

+0

標籤不是搜索條件。標籤用於分類。如果問題與特定標籤更爲相關,而不是通用標籤,則只能使用更具體的標籤。 – 2013-03-26 17:17:28

回答

2

一個更復雜的這樣做(但更可重複使用的)是使用與MultiBinding一個DataTrigger的方式和IMultiValueConverter

public class EqualsConverver : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     if (values.Length < 1) 
      return Binding.DoNothing; 

     var obj = values[0]; 
     for (int i = 1; i < values.Length; ++i) 
     { 
      if (!obj.Equals(values[i])) 
       return false; 
     } 

     return true; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, 
     object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

然後你觸發會是什麼樣子:

<DataTrigger Value="True"> 
    <DataTrigger.Binding> 
     <MultiBinding Converter="{StaticResource equalsConverter}"> 
      <Binding Path="Value" RelativeSource="{RelativeSource Self}" /> 
      <Binding Path="Maximum" RelativeSource="{RelativeSource Self}" /> 
     </MultiBinding> 
    </DataTrigger.Binding> 
    <Setter Property="Visibility" TargetName="Animation" Value="Collapsed"/> 
</DataTrigger> 
+0

謝謝,這正是我需要的。我已經創建了這個轉換器,並將xaml代碼放入了style.xaml。當我更新進度條的值時,此數據觸發器不會觸發。我在轉換器代碼中放置了一個斷點,但控制從未達到過這一點。我的進度條在usercontrol中,我需要在這種情況下做任何不同的事情嗎? – Jasti 2013-03-27 15:25:47

+0

每當我更改InotifyPropertyChanged的值時,是否需要調用ImultiConverter? – Jasti 2013-03-27 15:44:35

+0

不,它應該在任何屬性的值更改時自動工作。我假設觸發器在ProgressBar的模板中。如果情況並非如此,則不應使用RelativeSource,而應使用ElementName綁定。 – 2013-03-27 20:24:47

1

取而代之的是觸發的,因爲你已經有了後面的代碼,你可以爲動畫的completed event註冊。