【问题标题】:What's the DataContext of the Header elements inside a Hub control?Hub 控件内的 Header 元素的 DataContext 是什么?
【发布时间】:2014-07-13 06:24:24
【问题描述】:

我最近开始使用 Windows 运行时为 WP 8.1 进行开发,但我遇到了一个……我似乎不明白的“问题”。

我目前正在开发的应用程序使用Hub 控件,我想稍微调整其标题的外观。为此,我更改了Hub 控件的HeaderTemplate 属性。但是,当我尝试对标头的文本内容进行本地化时(注意这是 WinRT,本地化过程与 WP8 中的过程略有不同,可以找到 here),我“意外”通过制作像这样的模板:

<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 中,我将“MainPageHub.Header”属性设置为“foobar”(只是一个示例),而我得到的标题实际上是“foobar” (这是我想要的,但即便如此,它似乎也令人困惑!)。

【问题讨论】:

  • 你要绑定什么?显示更多 XAML。但是,是的,你是对的,它应该有可能是 Hub Header 的父元素的数据上下文,并且数据上下文应该从设置它的顶部元素传播。您在 xaml 中在什么元素上设置 datacontext?
  • @igrali,我已按照您的要求编辑了问题。

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


【解决方案1】:

作为Tim Heuer explains it here

注意这里的 x:Uid 值。这现在映射回您的键 RESW 文件。任何具有该起始键的东西都将具有属性 融入其中。因此,我们可以在 RESW 中使用“Text”键 值为“Hello World”的键名 MyTextBlock.Text 和 运行时将为您完成替换。这适用于属性 除了文本(即宽度)以及附加属性。

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

所以,现在已经清楚了 Header 是如何设置的 - 仍然是绑定部分。好吧,考虑到你有一个不同的 Header 模板,它需要执行 {Binding} 部分来实际获取通过资源设置的 header 的值。

【讨论】:

  • 想了想,终于明白了。非常感谢:)
猜你喜欢
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多