我正在学习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定义的控件中。 如何让它在后面的代码中工作?
答案 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);