Wpf 将Canvas.Size绑定到父用户控件,然后在代码中设置Canvas.Size

Wpf 将Canvas.Size绑定到父用户控件,然后在代码中设置Canvas.Size,wpf,Wpf,我在名为“root”的UserControl中的网格中有一个wpfCanvas,我将Canvas的宽度和高度绑定如下: Width="{Binding ElementName=root, Path=ActualWidth}" Height="{Binding ElementName=root, Path=ActualHeight}" 在画布上绘制各种DrawingVisual。 在“代码隐藏”中,我将画布的宽度和高度设置为ContentBounds.Right和ContentBounds.Bo

我在名为“root”的
UserControl
中的网格中有一个wpf
Canvas
,我将Canvas的
宽度和
高度绑定如下:

Width="{Binding ElementName=root, Path=ActualWidth}"
Height="{Binding ElementName=root, Path=ActualHeight}"
在画布上绘制各种
DrawingVisual
。 在“代码隐藏”中,我将画布的宽度和高度设置为
ContentBounds.Right
ContentBounds.Bottom
,这样我添加到画布上的每个
DrawingVisual
都将可见

这似乎没问题,但我对上面提到的绑定感到困惑。
这是从usercontrol的实际大小到画布大小的单向绑定

代码隐藏中的宽度和高度设置是否否决了此绑定

当我移除绑定时,画布也同样显示,但是控件也用于其他地方和情况,并且可能需要

代码隐藏中的
宽度
高度
设置是否否决了此绑定


对。以编程方式设置应用了单向绑定的目标属性的值将清除绑定。

您不需要将画布绑定到其根大小,因为默认情况下,画布将始终使用父级提供的所有可用空间。在您的情况下,画布将始终与UserControls中的网格一样大听起来非常合理,我想添加绑定是为了确保它确实如此,但显然是默认行为。那么绑定如何与代码隐藏更改相关呢?一旦您从代码隐藏设置了参数,您的绑定就会被覆盖,您不应该设置代码中与视图相关的参数!也许可以在WPF的设计中使用MVVM toutorialMVVM@DenisSchaf使用
DrawingContext
的具有数百或数千个对象的图形画布不能是100%MVVM,您将发现需要自定义画布和a.o。您需要一个绘制事件。使用wpf
Shapes
在性能上不起作用。使用“清除绑定”是指绑定实际上已被删除,还是说它已被覆盖但仍然存在?@Gerard:它已被删除。