Я пытаюсь сделать простую игру-кроссворд в 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. Кто-нибудь знает, как это делается?