将 double 属性 绑定到 AngleProperty

Binding double property to AngleProperty

有没有办法通过绑定来控制矩形的旋转?我这样试过,但不管用吗?

    // class Unit
    private double _rotation;
    public double rotation
    {
        get
        {
            return _rotation;
        }
        set
        {
            _rotation = value;
            OnPropertyChanged("rotation");
        }
    }
    public Binding rotationBinding { get; set; }

    // Controller class generating UI
    private Rectangle GenerateUnit(Unit u)
    {

        Rectangle c = new Rectangle() { Width = u.size, Height = u.size };

        c.Fill = new ImageBrush(new BitmapImage(new Uri(@"..\..\Images\tank\up.png", UriKind.Relative)));
        c.SetBinding(Canvas.LeftProperty, u.xBinding);
        c.SetBinding(Canvas.TopProperty, u.yBinding);

        RotateTransform rt = new RotateTransform();
        BindingOperations.SetBinding(rt, RotateTransform.AngleProperty, u.rotationBinding);
        c.LayoutTransform = rt;

        return c;
    }

X 和 Y 绑定工作正常,所以我猜这是正确实现的。

我只是在寻找绑定角度 属性 的方法,因此当我更改旋转 属性 时,它会在 UI 中旋转矩形。 (我不需要动画,瞬间切换角度就可以了)。

谢谢

问题似乎出在您的 rotationBinding 中。您应该在 Unit class:

中创建绑定
rotationBinding = new Binding("rotation");
rotationBinding.Source = this;// or instance of o your Unit class if you create rotationBinding outside Unit class

对我有用...

我建议不要在代码中创建绑定,因为您可以通过 XAML:

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid Margin="10">
        <Slider x:Name="AngleProvider"
                VerticalAlignment="Bottom"
                Minimum="0"
                Maximum="360" />
        <Rectangle Fill="Blue"
                   Margin="100"
                   RenderTransformOrigin="0.5,0.5">
            <Rectangle.RenderTransform>
                <RotateTransform Angle="{Binding Value, ElementName=AngleProvider}" />
            </Rectangle.RenderTransform>
        </Rectangle>
    </Grid>
</Window>

这在 window 的中心显示了一个 Rectangle 元素,在底部显示了一个 Slider 控件。拖动滑块改变矩形的旋转角度。

你应该绑定的是旋转角度。在这里,我使用滑块来提供该角度,但它显然可能来自 window 或 ViewModel 或其他任何代码隐藏中的 属性。