将双属性绑定到AngleProperty

时间:2015-01-25 13:26:25

标签: c# wpf binding

有没有办法通过Binding来控制矩形的旋转?我试过这种方式,但它不起作用吗?

    // 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绑定工作正常,所以我猜这是正确实现的。

我只是想找到一种绑定angle属性的方法,所以当我更改rotation属性时,它会在UI中旋转矩形。 (我不需要动画,立即切换角度很好)。

由于

2 个答案:

答案 0 :(得分:1)

问题似乎出在你的rotationBinding中。您应该在Unit类中创建绑定:

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

对我有用......

答案 1 :(得分:0)

当你可以通过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>

这会在窗口中央显示Rectangle元素,在底部显示Slider控件。拖动滑块可更改矩形的旋转角度。

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