#xaml #windows-phone-7 #binding #relativesource
#xaml #windows-phone-7 #привязка #relativesource
Вопрос:
Что я хочу сделать, так это привязать текст текстового блока к моему пользовательскому свойству ButtonSymbol пользовательского интерфейса.
Вот XAML для UserControl. Часть привязки для текстового блока должна быть заполнена.
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="Calculator.CalculatorButton"
d:DesignWidth="120" d:DesignHeight="80">
<Grid x:Name="LayoutRoot" Background="Transparent">
<Image Source="buttonb@2x.png" Stretch="Fill"/>
<Button x:Name="InvisibleButton" Content="{Binding ButtonSymbol}" Margin="0,0,0,0" d:LayoutOverrides="Width, Height" BorderThickness="1" Click="InvisibleButton_Click"/>
<TextBlock HorizontalAlignment="Center" Margin="0,0,0,0" TextWrapping="Wrap"
Text="{Binding ????????}"
VerticalAlignment="Top"/>
</Grid>
</UserControl>
И вот исходная часть кода:
namespace Calculator
{
public partial class CalculatorButton : UserControl
{
public string ButtonSymbol {get; set;}
public CalculatorButton()
{
// Required to initialize variables
InitializeComponent();
}
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
// TODO: Add event handler implementation here.
}
private void InvisibleButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
Debug.WriteLine(@"click");
Debug.WriteLine(ButtonSymbol);
// TODO: Add event handler implementation here.
}
}
}
Обратите внимание, что это WP7 с Silverlight, а класс RelativeSource отличается от других версий.
Ответ №1:
Вам нужно установить DataContext пользовательского элемента управления.
Если вы добавите это:
this.DataContext = this;
затем вы можете выполнить это в конструкторе или загруженном событии пользовательского элемента управления:
Text="{Binding ButtonSymbol}"
Обратите внимание, что вы также можете декларативно привязать источник данных XAML, это просто простой программный способ сделать это.