从资源wpf绑定文本块文本

时间:2015-11-06 03:40:43

标签: c# wpf xaml

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

我尝试上面的代码,但我不能绑定文本,我怎么能将资源文本块文本绑定到资源之外,谢谢

2 个答案:

答案 0 :(得分:1)

我猜你正试图在你的第二个非资源TextBlock中显示TextBlock资源中的Text。

  1. 您不需要DataTemplate。随着您将在WPF之旅中取得进展,您将了解这些。
  2. 下面的代码将在您的第二个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)

这里有各种各样的问题:

  1. 您在TextBlock Text绑定中指定Mode.TwoWay,它应该是Mode.OneWay。
  2. 您已绑定到Label的Text媒体资源。标签没有Text属性,只有Content。并且它不是依赖属性,因此您无法绑定它。 (也就是说,内部力学的侥幸确实使它看起来在某些条件下起作用。)
  3. 模板就是:模板。你不能绑定到不存在的东西,所以绑定毫无意义。
  4. 也许你可以准确地澄清你是什么,并试图这样做我们可以建议另一种方法来实现它?具体来说,请准确告诉我们您如何实例化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>
    

    同样,如果你真的想要,有很多方法可以绑定到数据模板声明,但为了做到这一点,我必须看到在运行时如何创建数据模板的细节。