【问题标题】:Data binding in pivot TitleTemplate for Windows PhoneWindows Phone 的数据透视 TitleTemplate 中的数据绑定
【发布时间】:2011-01-17 05:36:44
【问题描述】:

我必须在这里遗漏一些简单的东西...我正在编写一个 Windows Phone 7 应用程序,并且我已将我的数据透视表头自定义为以下内容:

<controls:Pivot Name="InfoPivot">
  <controls:Pivot.TitleTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal" Margin="0,0,0,0" VerticalAlignment="Top">
        <Rectangle Fill="{Binding CategoryFill}"  Height="50" Width="50" Margin="355,25,0,0" HorizontalAlignment="Left"  VerticalAlignment="Top" Name="CategoryRect" />
        <StackPanel Margin="-425,-14,0,0" Width="432">
          <TextBlock x:Name="StationTitle" Text="{Binding StationTitle}" Margin="10,0,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
          <TextBlock Name="LocationTitle" Text="{Binding LocationTitle}" TextWrapping="Wrap" Margin="12,0,0,20" Style="{StaticResource PhoneTextNormalStyle}"/>
         </StackPanel>
       </StackPanel>
     </DataTemplate>
   </controls:Pivot.TitleTemplate>

当我导航到此页面时,我将 Station 和 Location 作为参数传递,并在此页面的 OnNavigatedTo() 中尝试设置 StationTitle 和 LocationTitle。不幸的是,我最终得到:

Error 2 The name 'StationTitle' does not exist in the current context

我们应该/应该如何访问 Pivot TitleTemplate 中的成员?任何帮助将不胜感激!谢谢。

【问题讨论】:

  • 嗨,Shawn,您能告诉我们您是如何声明/传递参数的吗?
  • 来自 SelectionChangedHandler 中的 MainPage.xml:NavigationService.Navigate(new Uri("/TestInfoPivot.xaml?" + "Station=" + stationStr + "&Location=" + locationStr, UriKind.Relative)) ;我已经验证了 stationStr 和 locationStr 具有正确的值....然后在 TestInfoPivot.xaml 我做 string station = ""; if (NavigationContext.QueryString.TryGetValue("Station", out station)) { StationTitle = station; } 与 LocationTitle 类似。
  • TestInfoPivot 中的 QueryString 代码执行后,您在 StationTitle 和 LocationTitle 中看到正确的值了吗?没有看到代码块很难理解这一点 - 如果您可以将它们粘贴到原始问题的编辑中会更好。
  • 在提供其他详细信息时,请编辑您的问题,而不是将它们放在评论中。当这些细节包含代码时尤其如此,因为您可以看到代码几乎看不到注释。

标签: c# silverlight xaml windows-phone-7


【解决方案1】:

停止使用标题模板和绑定来实现这一点。试试这个:-

<controls:Pivot Name="InfoPivot">
   <controls:Pivot.Title>
       <StackPanel Orientation="Horizontal" Margin="0,0,0,0" VerticalAlignment="Top">
          <Rectangle Fill="{Binding CategoryFill}" Height="50" Width="50" Margin="355,25,0,0" HorizontalAlignment="Left"  VerticalAlignment="Top" Name="CategoryRect" />
          <StackPanel Margin="-425,-14,0,0" Width="432">
              <TextBlock x:Name="StationTitle" Margin="10,0,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
              <TextBlock x:Name="LocationTitle" TextWrapping="Wrap" Margin="12,0,0,20" Style="{StaticResource PhoneTextNormalStyle}"/> 
          </StackPanel>
        </StackPanel>
   </controls:Pivot.Title>

然后在代码隐藏中:-

 if (NavigationContext.QueryString.TryGetValue("Station", out station))
 {
     StationTitle.Text = station;
 }

 if (NavigationContext.QueryString.TryGetValue("LocationTitle", out locationTitle))
 {
     LocationTitle.Text = locationTitle;
 }

【讨论】:

  • 很奇怪,所以 TitleTemplate 不起作用?无论如何,这解决了我的问题。谢谢!
【解决方案2】:

在没有看到所有代码的情况下,这可能就像在两个 TextBlock 上使名称声明保持一致一样简单。

注意,一个是Name="",另一个是x:Name=""。

【讨论】:

  • 当元素具有Name 属性时,x:NameName 是相同的。 TextBlock 确实有 Name 属性。
【解决方案3】:

定义内联模板对我有用,但 TitleTemplate 不起作用。

<phone:Pivot>
    <phone:Pivot.Title>
        <TextBlock Margin="0"
            Text="{Binding Exercise.Name}" 
            Style="{StaticResource MainTitleStyle}"/>
    </phone:Pivot.Title>
</phone:Pivot>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多