0

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

<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 代码中访问它。

任何关于如何解决这个问题的想法都非常受欢迎,谢谢!

4

3 回答 3

1

从你现在所拥有的,做你想做的最快的方法是遍历可视化树

见这里的实现:

如何使用 DataTemplate 访问列表框中的特定项目?

于 2012-07-14T17:27:33.753 回答
0

您不能通过 x:Name 访问 ListPicker,因为它不是明确的:为您的全景图中的每个 PanoramaItem 生成一个 ListPicker。所以第一个问题是,这真的是你想做的吗?如果是这样,您需要使用绑定 (ItemSource) 填充它

于 2012-07-14T14:52:48.400 回答
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。您可以在您的案例中应用相同的技术,它会起作用。希望有帮助:)。

于 2012-07-14T17:35:07.697 回答