2013-04-18 2 views
2

Я изучаю WPF, и у меня есть некоторые проблемы с ним. Я сделал этот код XAML:Код позади не работает как XAML

<Window.Resources> 
    <DataTemplate x:Key="TemplateTest"> 
    <Button Margin="10" 
      BorderThickness="2" 
      Content="{Binding Path=Text}"> 
     <Button.Effect> 
     <DropShadowEffect BlurRadius="20" /> 
     </Button.Effect> 
    </Button> 
    </DataTemplate> 
</Window.Resources> 

<StackPanel x:Name="StackPanel"> 
    <TextBox x:Name="TextBox" 
      Margin="10">TextBox</TextBox> 

    <ContentControl Content="{Binding ElementName=TextBox, Path=.}" 
        ContentTemplate="{StaticResource ResourceKey=TemplateTest}" /> 
</StackPanel> 

и код позади:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     var Resource = this.Resources["TemplateTest"] as DataTemplate; 

     StackPanel.Children.Add(
      new ContentControl() 
      { 
       Content = new Binding() 
       { 
        ElementName = "TextBox", 
        Path = new PropertyPath(".") 
       }, 

       ContentTemplate = Resource, 
      }); 
    } 
} 

picture

Моя проблема заключается в том, что текст в текстовое поле только появляется в XAML определенный контроль. Как заставить его работать и в коде?

+0

ли вы получить какие-либо обязательные ошибки? И это работает, если вы удалите XAML-копию элемента управления? – Rachel

+0

Это не работает, если я удаляю его, но я заметил это только сейчас: Ошибка System.Windows.Data: 40: Ошибка пути BindingExpression: свойство «Текст» не найдено на «объекте» «Связывание» (HashCode = 23914501). BindingExpression: Path = Text; DataItem = 'Binding' (HashCode = 23914501); целевым элементом является «Button» (Name = ''); target - это «Content» (тип «Object») –

ответ

4

Вы устанавливаете ContentControl.Content на Binding, что не является обязательным для привязки свойства Content к значению.

Чтобы связать свойство в коде позади, вам нужно синтаксис вроде этого:

var newControl new ContentControl(); 
newControl.ContentTemplate = Resource; 

Binding b = new Binding(); 
b.ElementName = "TextBox"; 
b.Path = new PropertyPath("."); 

myContentControl.SetBinding(ContentControl.ContentProperty, b); 
+0

Спасибо, теперь он работает. –

Смежные вопросы