2016-07-29 109 views
1

我紡3D房子故事板內將以下代碼:改變動畫時間通過結合

<DoubleAnimation Storyboard.TargetName="HouseRotate" Storyboard.TargetProperty="Angle" From="0" To="-359" Duration="{Binding StringFormat=0:0:{0}, ElementName=slDuration, Path=Value, UpdateSourceTrigger=PropertyChanged}" RepeatBehavior="Forever"/> 

我想時間屬性來更改基礎上的滑塊值,但它似乎被卡住在1秒鐘。我知道滑塊的值正在改變,因爲我已將它輸出到標籤。

+0

你是否得到這個綁定的輸出錯誤? – adminSoftDK

+0

我沒有得到任何錯誤,但我從來沒有讓XAML給我一個運行時錯誤,所以我不知道它是否被無聲地破壞了 –

回答

1

在我看來,你需要爲了從doubleSlider的屬性值返回double)轉換爲Duration結構適當的轉換器。

看看這個簡單的例子:

<Window.Resources> 
    <local:DoubleToDurationConverter x:Key="DoubleToDurationConverter" /> 
</Window.Resources> 
<StackPanel> 
    <Button Content="Click me for an animation" Margin="20" Padding="20"> 
     <Button.Triggers> 
      <EventTrigger RoutedEvent="Button.Click"> 
       <BeginStoryboard> 
        <Storyboard> 
         <ColorAnimation To="Green" 
           Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" 
           FillBehavior="Stop" 
           Duration="{Binding ElementName=slider, Path=Value, Mode=OneWay, Converter={StaticResource DoubleToDurationConverter}}" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Button.Triggers> 
    </Button> 

    <Slider Name="slider" Minimum="10" Maximum="40" Value="30" 
      Margin="5" AutoToolTipPlacement="TopLeft" IsSnapToTickEnabled="True" /> 
</StackPanel> 

凡可以轉換成代碼:

public class DoubleToDurationConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     Duration duration = new Duration(TimeSpan.FromSeconds((double)value)); 
     return duration; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

請考慮,它是不可能在運行時改變動畫的持續時間。您可以在空閒時更改它。

+0

是的,我看到這樣做的可能性,但想看看它是否可能僅使用XAML完成。我最終通過停止動畫,改變我需要的屬性並重新啓動,在C#中完成了所有工作。 –

+1

恕我直言@AnubhavSrivastava它不可能僅僅通過使用XAML來完成它:你需要一些代碼行(如你所做的那樣) –