我有一个按钮模板:
<DataTemplate x:Key="TemplateTest">
<Button Margin="10" BorderThickness="2" Content="{Binding Text}" />
</DataTemplate>
我想创建一个文本框和一个按钮,其内容与文本框的文本相同。
<TextBox x:Name="TextBox" Margin="10">TextBox</TextBox>
<ContentControl DataContext="{Binding ElementName=TextBox}"
ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />
但是我这样按钮上没有任何东西。
答案 0 :(得分:2)
@ DanPuzey的一个在VS2012中仍然没有为我工作。不知道为什么它在Kaxaml
这样做了:
<TextBox x:Name="TextBox"
Margin="10"
Text="Hello World" />
<ContentControl Content="{Binding ElementName=TextBox,
Path=.}"
ContentTemplate="{StaticResource TemplateTest}" />
和
<DataTemplate x:Key="TemplateTest">
<Button Height="100"
Margin="10"
BorderThickness="2"
Content="{Binding Text}" />
</DataTemplate>
答案 1 :(得分:1)
这很简单,因为您没有设置内容控件的内容:设置DataContext
不会改变任何内容。试试这个:
<ContentControl Content="{Binding ElementName=TextBox}" ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />
以上在Kaxaml中对我有用,但如果它不适合你,那么我建议你试试这个,它明确地绑定到文本框的文本:
<ContentControl Content="{Binding Text, ElementName=TextBox}" ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />
答案 2 :(得分:1)
首先,您应该将contentControl的内容设置为绑定到文本
<TextBox x:Name="TextBox" Margin="10">TextBox</TextBox>
<ContentControl Content="{Binding ElementName=TextBox,Path=Text}"
ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />
现在您需要更改按钮的绑定:
<DataTemplate x:Key="TemplateTest">
<Button Margin="10" BorderThickness="2" Content="{Binding}" />
</DataTemplate>
答案 3 :(得分:1)
我不确定{Binding ElementName=TextBox}
是否设置了默认Binding.Path
。
您可以尝试将Path
设置为.
:DataContext="{Binding ElementName=TextBox, Path=.}"
或者您可以直接绑定元素的Text
属性:
<TextBox x:Name="TextBox" Margin="10">TextBox</TextBox>
<ContentControl DataContext="{Binding Text, ElementName=TextBox}"
ContentTemplate="{StaticResource ResourceKey=TemplateTest}" />
和
<DataTemplate x:Key="TemplateTest">
<Button Margin="10" BorderThickness="2" Content="{Binding}" />
</DataTemplate>