我最近开始使用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; (这就是我想要的,但即便如此,它似乎令人困惑!)。
答案 0 :(得分:2)
注意这里的x:Uid值。这现在映射回你的密钥 RESW文件。具有该起始键的任何内容都将具有属性 合并到它。所以我们可以在我们的RESW中使用关键字“文本” 键名MyTextBlock.Text,值为“Hello World”和 运行时将替换你。这适用于属性 除文本(即宽度)以及附加属性外。
我可以添加的是 - 注意x:Uid。这是MainPageHub。在本地化资源文件中,您有一个MainPageHub.Header。这意味着资源字符串的值将设置为控件的Header,其中x:Uid设置为MainPageHub。
所以,现在很清楚如何设置Header - 仍然存在绑定部分。好吧,考虑到你有一个不同的标题模板,它需要做{Binding}部分来实际获得通过资源设置的标题的值。