有没有办法通过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中旋转矩形。 (我不需要动画,立即切换角度很好)。
由于
答案 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或其他任何内容。