显示一个矩形并将Width,Height,Angle绑定到视图模型类,就像我在XAML中所期望的一样
<Rectangle
RenderTransformOrigin="0.5,0.5"
Fill="Black"
Width="{Binding Path=Width, Mode=TwoWay}"
Height="{Binding Path=Height, Mode=TwoWay}">
<Rectangle.RenderTransform>
<RotateTransform Angle="{Binding Path=Angle, Mode=TwoWay}" />
</Rectangle.RenderTransform>
</Rectangle>
但是,在代码隐藏中创建矩形时,我可以绑定到高度和宽度,但不能绑定角度。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Binding bindH = new Binding("Height");
bindH.Mode = BindingMode.TwoWay;
Binding bindW = new Binding("Width");
bindW.Mode = BindingMode.TwoWay;
// DOES NOT WORK
// AND I DID TRY MANY OTHER COMBINATIONS
Binding bindA = new Binding("Angle");
bindA.Mode = BindingMode.TwoWay;
Rectangle r1 = new Rectangle();
SolidColorBrush myBrush = new SolidColorBrush(Colors.Black);
r1.Fill = myBrush;
r1.RenderTransformOrigin = new Point(0.5,0.5);
r1.SetBinding(Rectangle.WidthProperty, bindW);
r1.SetBinding(Rectangle.HeightProperty, bindH);
** //不起作用**
r1.SetBinding(RenderTransformProperty, bindA);
LayoutPanel.Children.Add(r1); // my custom layout panel
}
所有帮助表示赞赏。
答案 0 :(得分:1)
ViewModel中的Angle属性必须作为RotateTransform公开。虚拟机的简单实现如下所示:
public class ViewModel
{
public RotateTransform Angle { get; set; }
public int Height { get; set; }
public int Width { get; set; }
public ViewModel()
{
Angle = new RotateTransform(10);
Height = 50;
Width = 100;
}
}
然后绑定的工作方式与在Window_Loaded事件处理程序中编写完全相同。这是有道理的,因为在工作的XAML版本中,您在Rectangle的RenderTransform标记中以声明方式指定RotateTransform对象。
希望这会有所帮助:)
答案 1 :(得分:0)
您在矩形上设置角度,但您必须在RotateTransform上设置角度。
试试这个,
RotateTransform rot = new RotateTransform();
r1.RenderTransform = rot;
rot.SetBinding(RotateTransform.AngleProperty, bindA);
答案 2 :(得分:0)
使用Binding调用RotateTransform的SetValue方法不起作用。不知道为什么。但是通过BindingOperations可以工作。
var rotateTransform = new RotateTransform();
BindingOperations.SetBinding(rotateTransform, RotateTransform.AngleProperty, new Binding("RotationAngle") { Source = myViewModel });
myControl.RenderTransform = rotateTransform;
其中“RotationAngle”是ViewModel中的double属性。
仅供参考,XAML的绑定似乎最终有效。我首先得到了几个Binding错误然后它可以工作......是的,我的DataContext在创建RotateTransform的对象之前就已经存在了。为了避免Binding错误,我使用了代码隐藏并在Loaded事件期间设置了Binding。