Я пытаюсь создать простую кроссвордную игру в Silverlight 2.0. Я работаю над компонентом UserControl-ish, который представляет собой квадрат в головоломке. У меня возникают проблемы с привязкой моих свойств UserControl со своими "элементами". Я наконец-то (вроде) получил его работу (может быть полезно для некоторых - мне потребовалось несколько долгих часов), но хотелось сделать его более "элегантным".
Я предположил, что у него должен быть отсек для контента и ярлык (в правом верхнем углу), который необязательно содержит его номер. Управление содержимым, вероятно, является TextBox, а управление меткой может быть TextBlock. Поэтому я создал UserControl с этой базовой структурой (значения на этом этапе жестко запрограммированы):
<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>
Я также создал DependencyProperties в классе Square следующим образом:
public static readonly DependencyProperty LabelTextProperty;
public static readonly DependencyProperty ContentCharacterProperty;
// ...(static constructor with property registration, .NET properties
// omitted for brevity)...
Теперь я хотел бы выяснить, как привязать элемент Label и Content к двум свойствам. Я делаю это так (в файле с кодом):
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 } );
Это было бы более элегантно сделано в XAML. Кто-нибудь знает, как это сделано?