2

我正在学习 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,
            });
    }
}

图片

我的问题是文本框的文本只出现在 XAML 定义的控件中。如何让它在后面的代码中也能工作?

4

1 回答 1

4

您将 设置ContentControl.ContentBinding,这与将Content属性绑定到值不同。

要在后面的代码中绑定属性,您需要如下语法:

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

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

myContentControl.SetBinding(ContentControl.ContentProperty, b);
于 2013-04-18T14:20:04.157 回答