2013-04-18 49 views
1

我有一个按钮模板:绑定到DataTemplate中

<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}" /> 

但我没有以这种方式得到按钮上的任何东西。

回答

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> 
+0

它不适用于VS 2010中的任何想法,为什么? – user1064519

+0

不是soz。我不使用VS2010 – Viv

1

这很失败,很简单,因为您没有设置内容控制的内容:设置DataContext不会改变任何内容。试试这个:

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

在Kaxaml以上为我工作,但如果它不为你工作,那么我建议你试试这个代替,其中明确绑定到文本框的文本:

<ContentControl Content="{Binding Text, ElementName=TextBox}" ContentTemplate="{StaticResource ResourceKey=TemplateTest}" /> 
+0

我得到这个错误:属性“内容'不能将数据绑定到视觉元素。 –

+0

上面在Kaxaml中为我工作,但我编辑提供了一个替代方案... –

+0

它也适用于我的Kaxaml,但不是在VS 2012.但我仍然有绑定字符串的问题,我只能绑定其长度按钮,因为我不知道我只能写'{绑定}'。 –

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> 
+0

或者您可以选择将整个TextBox作为ContentControl的内容作为替代方式进行绑定,并且您可以像OP那样将Button的内容设置为“{Binding Text}”。如果需要,你可以用这种方式引用更多的文本值。 – Viv

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> 
+0

它只适用于如果我设置内容而不是DataContext –