【发布时间】:2011-12-05 11:34:29
【问题描述】:
这是一个非常基本的要求,但我被卡住了!对于 WPF/.Net - 我只想在我的 ListView 中动态绘制到 Canvas 列中。一次失败的尝试:
<ListView name="myGridView">
<GridViewColumn Header="ColumnA" DisplayMemberBinding="{Binding Path=ColumnA}" />
<GridViewColumn DisplayMemberBinding="{Binding Path=ColumnB}">
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SUSPECT!
<Canvas Name="canvasColumn" Width="100" Height="20" />
</GridViewColumn>
</GridView>
在我的代码中,我有一个类“MyData”,其字段绑定到非画布 ListView 列。我遍历 ListView 中的一些“Whatever”创建项目:
foreach (Whatever whatever in whatevers)
{
MyData myData = new MyData();
myData.ColumnA = whatever.A;
myData.ColumnB = new Canvas();
Line line = new Line();
line.Stroke = System.Windows.Media.Brushes.Black;
line.X1 = line.Y1 = 1;
line.X2 = line.Y2 = 100;
line.StrokeThickness = 1;
myData.ColumnB.Children.Add(line);
myListView.Items.Add(myData);
}
这不起作用:屏幕画布列中的每一行都显示文本“System.Windows.Controls.Canvas”。这并不奇怪 - 我已经以与文本列相同的方式绑定列,并且类型名的一些 toString 转换似乎开始了。但是,我尝试了其他一些方法,但无法显示 Canvas。
我还尝试删除上面标记为“SUSPECT”的列绑定和 myData 的 ColumnB 字段,寻求一种通过列表视图引用画布小部件的方法,即某种形式:
myListView.reference-to-new-row-and-canvas-column = theNewCanvasIDrewOn;
我的一些搜索发现了样式、ItemPanel 配置等丑陋的混乱:请 - 如果有必要,我至少希望它可以保持最小......
非常感谢任何指导。
干杯, 托尼
更新
出于我的目的,最小的解决方案似乎是将 DataTemplate 添加到 App.xaml 的 Application.Resources 标记:
<DataTemplate x:Key="myTemplate">
<Canvas Width="60" Height="20" Background="Red" ClipToBounds="True" >
<ContentPresenter Content="{Binding myCanvasField}" />
</Canvas>
</DataTemplate>
并将 GridViewColumn 定义为:
<GridViewColumn CellTemplate="{StaticResource myTemplate}" Header="title" />
感谢 Dean 为我指明了正确的方向,感谢 Binding to Canvas 了解特定于画布的详细信息。然后,我“绘制”添加到 ListView 的对象的 Canvas 属性成员。
【问题讨论】:
-
你有什么样的图纸?
-
@Dmitry:列表视图将显示“任务”,图片将以对数刻度显示开始日期、承诺交货日期、预期交货日期等条形 - 基本上一目了然检查任务的进展情况。稍后我可能会变得更喜欢并想指出假期/休假期或其他什么......
-
顺便说一句:如果您正在谈论“在”画布上“绘图”,那么您并没有真正“获得”WPF。 WPF 使用保留模式图形,这与 WinForms 的绘制事件有很大不同;而 WPF 的 Canvas 是一个布局面板,而不是绘图表面。您不会“在”画布上“绘图”;您向其中添加控件/元素。如果您希望在表面上“绘图”,请查看 DrawingGroup 或 WriteableBitmap。
-
@Joe:我理解区别,但最终 - 相同的差异;-)。画布能够显示我需要的东西......干杯。
标签: c# .net wpf listview wpf-controls