简体   繁体   English

情节提要TargetProperty绑定

[英]Storyboard TargetProperty binding

I have a Control that can be moved on by dragging. 我有一个可以通过拖动继续移动的控件。 when i drag the control i have a code behind that changes a DependencyProperty that a TranslateTransform is bound to. 当我拖动控件时,后面有一个代码,该代码更改了TranslateTransform绑定到的DependencyProperty。 now i need to add a button that when is pressed it moves the control, and needs to update the DependencyProperty. 现在我需要添加一个按钮,该按钮在按下时将移动控件,并且需要更新DependencyProperty。 I can move the control but can't figure out how to update the DependencyProperty. 我可以移动控件,但不知道如何更新DependencyProperty。

code behind: 后面的代码:

public partial class AirspeedIndicatorView : UserControl
{
    public static readonly DependencyProperty WantedValueProperty =
        DependencyProperty.Register("WantedValue", typeof(double), typeof(AirspeedIndicatorView),
        new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, WantedPropertyChanged));

    public double WantedValue
    {
        get { return (double)GetValue(WantedValueProperty); }
        set { SetValue(WantedValueProperty, value); }
    }

    private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
    {
        WantedValue += e.VerticalChange;
    }

}

XAML: XAML:

<Thumb Canvas.Top="-6" Height="12" Width="16" DragDelta="Thumb_DragDelta" x:Name="WantedThumb">
    <Thumb.RenderTransform>
        <TranslateTransform Y="{Binding WantedValue,ElementName=View}" />
    </Thumb.RenderTransform>
</Thumb>

<Button Padding="1" Margin="1">
    <Button.Style>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
            <Setter Property="OverridesDefaultStyle" Value="False" />
            <Style.Triggers>
                <Trigger Property="IsPressed" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard x:Name="MoveWanted">
                            <Storyboard Target="{x:Reference WantedThumb}" TargetProperty="RenderTransform.Y" AutoReverse="False">
                                <DoubleAnimation BeginTime="00:00:00" Duration="0:0:0" By="-1" />
                                <DoubleAnimation BeginTime="00:00:00.5" Duration="0:0:1.5" By="-15" />
                                <DoubleAnimation BeginTime="00:00:02" Duration="0:0:1" By="-20" RepeatBehavior="Forever" />
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                </Trigger>
                <Trigger Property="IsPressed" Value="False">
                    <Trigger.EnterActions>
                        <StopStoryboard BeginStoryboardName="MoveWanted" />
                    </Trigger.EnterActions>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

I don't have time to check it now, but you should be able to use the ObjectAnimationUsingKeyFrames class to update your DependencyProperty : 我现在没有时间检查它,但是您应该可以使用ObjectAnimationUsingKeyFrames更新DependencyProperty

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Saved">
    <DiscreteObjectKeyFrame KeyTime="0">
        <DiscreteObjectKeyFrame.Value>
            <System:Double>10.0</System:Double>
        </DiscreteObjectKeyFrame.Value>
    </DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>

Actually, the DoubleAnimationUsingKeyFrames class might be better for you as it is intended to work with double s, but the only down side is that I don't believe that you can data bind the numerical value, so it would have to be a hard coded value. 实际上, DoubleAnimationUsingKeyFrames可能更适合您,因为它打算与double s一起使用,但是唯一的缺点是我不认为您可以对数据绑定数据,所以它必须是硬编码的值。 From the last linked page: 从最后一个链接页面:

<DoubleAnimationUsingKeyFrames
    Storyboard.TargetName="AnimatedTranslateTransform"
    Storyboard.TargetProperty="X"
    Duration="0:0:6"
    RepeatBehavior="Forever">

    <!-- Using a LinearDoubleKeyFrame, the rectangle moves 
         steadily from its starting position to 500 over 
         the first 3 seconds.  -->
    <LinearDoubleKeyFrame Value="500" KeyTime="0:0:3" />

    <!-- Using a DiscreteDoubleKeyFrame, the rectangle suddenly 
         appears at 400 after the fourth second of the animation. -->
    <DiscreteDoubleKeyFrame Value="400" KeyTime="0:0:4" />

    <!-- Using a SplineDoubleKeyFrame, the rectangle moves 
         back to its starting point. The
         animation starts out slowly at first and then speeds up. 
         This KeyFrame ends after the 6th
         second. -->
    <SplineDoubleKeyFrame KeySpline="0.6,0.0 0.9,0.00" Value="0" KeyTime="0:0:6" />
</DoubleAnimationUsingKeyFrames>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM