我需要显示一个RectangleGeometry矩形的集合,这些矩形将在ViewModel中添加和删除,因此我创建了一个RectangleGeometry对象的ObservableCollection并在GeometryGroup中绑定它们。
为了让我的问题看起来很简单,我创建了一个没有MVVM的非常简单的项目。即使我绑定到简单的代码隐藏,也不会出现矩形。我仍然处于WPF学习模式,所以如果你有更好的方法使用模板或其他方式,我非常开放。
xaml:
error
代码隐藏:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApplication1"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="1024"
Height="768"
mc:Ignorable="d">
<Grid>
<Canvas>
<Path Fill="Red" Opacity=".4">
<Path.Data>
<GeometryGroup Children="{Binding Rectangles}"
FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Grid>
</Window>
答案 0 :(得分:0)
你完全以错误的方式解决这个问题。一方面,您正在尝试直接构建GUI对象(即RectangeGeometry),然后另一方面尝试使用数据绑定。选一个。
如果您决定使用DataBinding,则为矩形对象创建数据结构,然后绑定到ObservableCollection。并且不要使用Canvas,使用ItemsControl并将其ItemPanel设置为Canvas。使用DataTemplate覆盖要绘制的项目的ItemTemplate,然后在ItemContainerStyle中设置Canvas.Left / Canvas.Top参数。