То, что у вас не получится, потому что Silverlight упаковывает каждый элемент - каждый экземпляр DataTemplate - в ListBoxItem, а присоединенные свойства Grid.Column и Grid.Row должны применяться к этому ListBoxItem, а не кTextBox, который становится содержимым этого ListBoxItem.
Хорошая новость заключается в том, что вы можете устанавливать атрибуты неявного ListBoxItem с помощью ListBox.ItemContainerStyle.
Плохая новость заключается в том, что ItemContainerStyle не поддерживаетсвязывание.Поэтому вы не можете использовать его для установки свойств, прикрепленных к Grid.Column и Grid.Row, к атрибутам элемента данных под рукой.
Одно из использованных мной решений - это создать подкласс ListBox и настроить привязку.в PrepareContainerForItemOverride.Вот очень грубый, зашитый пример:
public class GriderrificBox : ListBox
{
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
FrameworkElement fe = element as FrameworkElement;
if (fe != null)
{
BindingOperations.SetBinding(fe, Grid.RowProperty,
new Binding { Source = item, Path = new PropertyPath("Row") });
BindingOperations.SetBinding(fe, Grid.ColumnProperty,
new Binding { Source = item, Path = new PropertyPath("Column") });
}
}
}
Использование:
<local:GriderrificBox>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Text}" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</local:GriderrificBox>
В этом коде есть (по крайней мере) два основных уродства: во-первых, вам все равно нужно явно указать ItemsPanelв XAML, хотя элемент управления работает только с панелями Grid;и во-вторых, пути привязки встроены в код.Первая может быть решена с помощью обычного механизма управления по умолчанию, а вторая - путем определения свойств, таких как RowBindingPath и ColumnBindingPath, с которыми PrepareItemForContainerOverride может обращаться вместо использования проводных путей.Надеюсь, в любом случае, чтобы вы пошли!