Hub控件中Header元素的DataContext是什么?

时间:2014-05-23 19:16:19

标签: xaml data-binding localization windows-runtime windows-phone-8.1

我最近开始使用Windows Runtime为WP 8.1开发,我遇到了一个问题"我似乎不明白。

我目前正在开发的应用程序使用Hub控件,我想略微调整其标题的外观。为此,我更改了HeaderTemplate控件的Hub属性。但是,当我尝试本地化标题的文本内容时(请注意,这是WinRT,本地化过程与WP8中的过程略有不同,可以找到here),I"意外地" ;通过制作如下模板来解决问题:

<Hub.HeaderTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding}"
                   Foreground="Red"/>
    </DataTemplate>
</Hub.HeaderTemplate>
但是,我不明白它为什么会起作用。当您像这样进行数据绑定时(仅使用表达式{Binding}),该元素是否与其父亲获得相同的DataContext?引擎盖下发生了什么?毕竟,谁是TextBlock的父元素?

提前致谢。

修改

正如igrali所问,这里是XAML的更完整视图:

<Page ...
      DataContext="{Binding Data, RelativeSource={RelativeSource Self}}">
    <Grid Background="#FFF6DB">
    <Hub Name="MainPageHub"
         x:Uid="MainPageHub"
         Margin="0,27,0,0">
        <Hub.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}"
                           Foreground="White"/>
            </DataTemplate>
        </Hub.HeaderTemplate>
...

然后,在/Strings/en-US/Resources.resx中,我有一个&#34; MainPageHub.Header&#34;物业设置为&#34; foobar&#34; (只是一个例子),我得到的标题实际上是&#34; foobar&#34; (这就是我想要的,但即便如此,它似乎令人困惑!)。

1 个答案:

答案 0 :(得分:2)

作为Tim Heuer explains it here

  

注意这里的x:Uid值。这现在映射回你的密钥   RESW文件。具有该起始键的任何内容都将具有属性   合并到它。所以我们可以在我们的RESW中使用关键字“文本”   键名MyTextBlock.Text,值为“Hello World”和   运行时将替换你。这适用于属性   除文本(即宽度)以及附加属性外。

我可以添加的是 - 注意x:Uid。这是MainPageHub。在本地化资源文件中,您有一个MainPageHub.Header。这意味着资源字符串的值将设置为控件的Header,其中x:Uid设置为MainPageHub。

所以,现在很清楚如何设置Header - 仍然存在绑定部分。好吧,考虑到你有一个不同的标题模板,它需要做{Binding}部分来实际获得通过资源设置的标题的值。