访问PanoramaHeader模板中的列表选择器

时间:2012-07-14 13:56:29

标签: c# windows-phone-7 silverlight-toolkit panorama-control listpicker

我有一个全景控件,我在其中创建了一个标题模板,用于在其中添加列表选择器。 (就像民众中心选择社交账户一样)

<DataTemplate x:Key="PanoramaItemHeaderTemplate">
     <ContentPresenter>
          <StackPanel Height="129">
               <TextBlock Text="{Binding}" FontSize="72" Margin="0,7,0,0" />
               <toolkit:ListPicker x:Name="listPick" Margin="0,-21,0,0" BorderThickness="0">
                     <toolkit:ListPickerItem Content="twitter"></toolkit:ListPickerItem>
               </toolkit:ListPicker>                    
          </StackPanel>
     </ContentPresenter>
</DataTemplate>

全景控件位于MainPage.xaml文件中,我希望能够从后面的代码访问listpicker,以便能够填充它,并处理它的选择事件。

我不知道该怎么做。我尝试将x:name属性添加到列表选择器中,我无法在后面的MainPage代码中访问它。

非常欢迎任何有关如何处理此事的想法,谢谢!

3 个答案:

答案 0 :(得分:1)

从现在开始,最快捷的方式就是遍历视觉树

请参阅此处了解实施情况:

How to access a specific item in a Listbox with DataTemplate?

答案 1 :(得分:0)

您无法通过x:Name访问ListPicker,因为它不是明确的:为Panorama中的每个PanoramaItem生成了一个ListPicker。所以第一个问题是,它真的是你想要做的吗?如果需要,您需要使用绑定(ItemSource)

填充它

答案 2 :(得分:0)

您可以访问其他资源中的元素,请考虑以下示例:

<Grid Name="myGrid">
<StackPanel x:Name="stack1">
<TextBlock x:Name="abc"/>
</StackPanel>
</Grid>

默认情况下,我们只能在代码中访问Grid myGrid。要获得对StackPanel的引用,我们可以这样做:

StackPanel myStack=myGrid.FindName("stack1") as Stackpanel;

之后我们可以参考TextBlock

TextBlock myTextBlock=myStack.FindName("abc") as TextBlock;

您可以根据需要修改myTextBlock。您可以在您的情况下应用相同的技术,它将起作用。 希望有所帮助:)。