Estoy tratando de hacer un juego de crucigramas simple en Silverlight 2.0. Estoy trabajando en un componente UserControl-ish que representa un cuadrado en el rompecabezas. Tengo problemas para enlazar las propiedades de UserControl con sus 'elementos. Finalmente (de alguna manera) funcionó (puede ser útil para algunos, me tomó algunas horas largas), pero quería hacerlo más 'elegante'.Enlace Silverlight UserControl propiedades personalizadas a sus 'elementos
Imagino que debería tener un compartimento para el contenido y una etiqueta (en la esquina superior derecha) que opcionalmente contiene su número. El control de contenido probablemente sea un TextBox, mientras que el control de etiqueta podría ser un TextBlock. Así que creé un control de usuario con esta estructura básica (los valores están codificados en esta etapa):
<UserControl x:Class="XWord.Square"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
FontSize="30"
Width="100" Height="100">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock x:Name="Label" Grid.Row="0" Grid.Column="1"
Text="7"/>
<TextBox x:Name="Content" Grid.Row="1" Grid.Column="0"
Text="A"
BorderThickness="0" />
</Grid>
</UserControl>
También he creado DependencyProperties en la clase de la plaza de esta manera:
public static readonly DependencyProperty LabelTextProperty;
public static readonly DependencyProperty ContentCharacterProperty;
// ...(static constructor with property registration, .NET properties
// omitted for brevity)...
Ahora me gustaría averiguar cómo vincular el elemento Etiqueta y Contenido a las dos propiedades. Lo hago así (en el archivo de código subyacente):
Label.SetBinding(TextBlock.TextProperty, new Binding { Source = this, Path = new PropertyPath("LabelText"), Mode = BindingMode.OneWay });
Content.SetBinding(TextBox.TextProperty, new Binding { Source = this, Path = new PropertyPath("ContentCharacter"), Mode = BindingMode.TwoWay });
Eso sería más elegante hecho en XAML. ¿Alguien sabe cómo se hace eso?
Una pregunta tan importante pero una respuesta tan elusiva. –