后面的代码不能用作XAML

时间:2013-04-18 14:11:00

标签: c# wpf xaml

我正在学习WPF,我遇到了一些麻烦。我做了这个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定义的控件中。 如何让它在后面的代码中工作?

1 个答案:

答案 0 :(得分: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);