Это действительно основное требование, но я застрял! Для WPF / .Net - я просто хочу динамически рисовать в столбце Canvas в моем ListView. Одна неудачная попытка:
<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:
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, пытаясь найти способ ссылки на виджеты Canvas через просмотр списка, то есть что-то в форме:
myListView.reference-to-new-row-and-canvas-column = theNewCanvasIDrewOn;
В результате некоторых моих поисков были обнаружены ужасные путаницы стилей, конфигов ItemPanel и т. Д.: Пожалуйста - если это необходимо, я, по крайней мере, надеюсь, что он может быть минимальным ....
Любое руководство с благодарностью.
Cheers,
Tony
UPDATE
Для моих целей минимальным решением является добавление DataTemplate в тег Application.Resources App.xaml:
<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" />
Спасибо Дину за то, что он указал мне правильное направление, и Привязка к холсту для деталей, специфичных для холста. Затем я «рисую» элемент свойства Canvas объекта, который добавляю в ListView.