Я пытаюсь создать простую кроссвордную игру в Silverlight 2.0. Я работаю над компонентом UserControl-ish, который представляет собой квадрат в головоломке. У меня возникли проблемы с привязкой свойств UserControl с его элементами. Я наконец-то (вроде) получил его работу (может быть полезно для некоторых - мне потребовалось несколько долгих часов), но хотелось сделать его более «элегантным».Связывание Silverlight Пользовательские свойства 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 в площади класса, как это:
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. Кто-нибудь знает, как это делается?
Такой важный вопрос пока такой неуловимый ответ. –