将 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 或其他任何代码隐藏中的 属性。
有没有办法通过绑定来控制矩形的旋转?我这样试过,但不管用吗?
// 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 或其他任何代码隐藏中的 属性。