<Grid.Resources>
<DataTemplate x:Key="trackTemplateY">
<TextBlock x:Name="txbValueY" Text="{Binding ValueX}" Margin="5" FontSize="11" FontWeight="Medium"/>
</DataTemplate>
</Grid.Resources>
<TextBlock Text="{Binding ElementName=txbValueY,Mode=OneWay,Path=Text}"
Background="Orange" Foreground="White"/>
我尝试上面的代码,但我不能绑定文本,我怎么能将资源文本块文本绑定到资源之外,谢谢
答案 0 :(得分:1)
我猜你正试图在你的第二个非资源TextBlock中显示TextBlock资源中的Text。
下面的代码将在您的第二个TextBlock中显示“资源文本”。
<Grid.Resources>
<TextBlock x:Key="TbRes1" Text="Resource Text" x:Name="txbValueY" Margin="5" FontSize="11" FontWeight="Medium"/>
</Grid.Resources>
<TextBlock Text="{Binding Source={StaticResource TbRes1},Mode=OneWay,Path=Text}"
Background="Orange" Foreground="White"/>
答案 1 :(得分:0)
这里有各种各样的问题:
Text
媒体资源。标签没有Text属性,只有Content。并且它不是依赖属性,因此您无法绑定它。 (也就是说,内部力学的侥幸确实使它看起来在某些条件下起作用。)也许你可以准确地澄清你是什么,并试图这样做我们可以建议另一种方法来实现它?具体来说,请准确告诉我们您如何实例化DataTemplate。
更新:
您需要创建第一个文本框,以便第二个文本框绑定到它,只需在DataTemplate中声明它不会导致它自己发生,因此直接绑定将失败。通常应该避免将UI元素绑定在一起,为什么不能简单地为第二个文本框提供与第一个文本框相同的绑定?
<Grid>
<Grid.Resources>
<DataTemplate x:Key="trackTemplateY">
<TextBlock x:Name="txbValueY" Text="{Binding ValueX}" Margin="5" FontSize="11" FontWeight="Medium"/>
</DataTemplate>
</Grid.Resources>
<TextBlock Text="{Binding ValueX}" Background="Orange" Foreground="White"/>
</Grid>
如果出于某种原因,这是不可能的,那么您也可以创建一个绑定代理对象(有关详细信息,请参阅this page):
<Grid>
<Grid.Resources>
<local:BindingProxy x:Key="proxy" Data="{Binding ValueX}" />
<DataTemplate x:Key="trackTemplateY">
<TextBlock x:Name="txbValueY" Text="{Binding ValueX}" Margin="5" FontSize="11" FontWeight="Medium"/>
</DataTemplate>
</Grid.Resources>
<TextBlock Text="{Binding Source={StaticResource ResourceKey=proxy}, Path=Data}" Background="Orange" Foreground="White"/>
</Grid>
同样,如果你真的想要,有很多方法可以绑定到数据模板声明,但为了做到这一点,我必须看到在运行时如何创建数据模板的细节。