Lo que tenga no funcionará porque Silverlight ajusta cada elemento, cada instancia de DataTemplate, en un ListBoxItem, y las propiedades adjuntas Grid.Column y Grid.Row deben aplicarse a ese ListBoxItem, no a el TextBox que se convierte en el contenido de ese ListBoxItem.
La buena noticia es que puede establecer atributos en el ListBoxItem implícito utilizando ListBox.ItemContainerStyle.
La mala noticia es que ItemContainerStyle no admite el enlace de forma inmediata. Por lo tanto, no puede usarlo para establecer las propiedades adjuntas Grid.Column y Grid.Row a los atributos del elemento de datos en cuestión.
Una solución que he utilizado es subclase ListBox y configurar el enlace en PrepareContainerForItemOverride. He aquí una muy cruda, ejemplo de cableado:
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") });
}
}
}
Uso:
<local:GriderrificBox>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Text}" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</local:GriderrificBox>
Hay (al menos) dos principales fealdades con este código: en primer lugar, usted todavía tiene que especificar explícitamente ItemsPanel en XAML, incluso aunque el control solo funciona con paneles de cuadrícula; y segundo, las rutas de enlace están cableadas en el código. El primero se puede abordar utilizando el mecanismo de estilo predeterminado de control normal, y el segundo definiendo propiedades como RowBindingPath y ColumnBindingPath que PrepareItemForContainerOverride puede consultar en lugar de utilizar rutas cableadas. ¡Con suerte lo suficiente para que te vayas!
no está claro lo que intenciones completas son. ¿Estás realmente detrás de la semántica de ListBox que es una lista (que posiblemente requiera desplazamiento) de N elementos donde se pueden seleccionar uno o más? – AnthonyWJones