我正在为 Windows Phone 7 使用 C#、Silverlight、Visual Studio。
我有兴趣只获取在枢轴期间当前显示在屏幕上的视觉元素。例如,我的枢轴可能有 5 个 PivotItem,但我只想获取每次轻弹后显示的项目。
现在,我可以从可视化树中获取整个枢轴,显然我可以选择一个特定的 PivotItem。但我希望能够只获得屏幕上的当前枢轴。最终目标是获取屏幕上元素的绝对位置,而不考虑当前的 PivotItem。
这可能吗?如果是这样,怎么做?
我正在为 Windows Phone 7 使用 C#、Silverlight、Visual Studio。
我有兴趣只获取在枢轴期间当前显示在屏幕上的视觉元素。例如,我的枢轴可能有 5 个 PivotItem,但我只想获取每次轻弹后显示的项目。
现在,我可以从可视化树中获取整个枢轴,显然我可以选择一个特定的 PivotItem。但我希望能够只获得屏幕上的当前枢轴。最终目标是获取屏幕上元素的绝对位置,而不考虑当前的 PivotItem。
这可能吗?如果是这样,怎么做?
SelectedItem
和/或SelectedIndex
在 Pivot 上将返回当前可见的 PivotItem。
示例代码为您说明我的观点:
XAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!--Pivot Control-->
<controls:Pivot x:Name="SomePivot" Title="MY SAMPLE PIVOT">
<StackPanel>
<Button Content="Button 0"/>
<Button Content="Button 1"/>
<Button Content="Button 2"/>
<Button Content="Button 3"/>
<Button Content="Button 4"/>
<Button Content="Button 5"/>
<Button Content="Button 6"/>
<Button Content="Button 7"/>
<Button Content="Button 8"/>
<Button Content="Button 9"/>
<Button Content="Button 0"/>
<Button Content="Button 1"/>
<Button Content="Button 2"/>
<Button Content="Button 3"/>
<Button Content="Button 4"/>
<Button Content="Button 5"/>
<Button Content="Button 6"/>
<Button Content="Button 7"/>
<Button Content="Button 8"/>
<Button Content="Button 9"/>
</StackPanel>
</controls:PivotItem>
<controls:PivotItem Header="item2">
<Button Content="Button D" Name="B"/>
</controls:PivotItem>
<controls:PivotItem Header="item3">
<Button Content="Button D" Name="C"/>
</controls:PivotItem>
<controls:PivotItem Header="item4">
<Button Content="Button D" Name="D"/>
</controls:PivotItem>
</controls:Pivot>
<Button Grid.Row="1" Content="Get Current Pivot Item" Click="GetCurrentPivotItem"/>
</Grid>
代码隐藏:
private void GetCurrentPivotItem(object sender, RoutedEventArgs e)
{
PivotItem pivotItem = (PivotItem)SomePivot.SelectedItem;
Debug.WriteLine("Pivot Item : {0}", pivotItem.Header);
foreach (var element in VisualTreeHelper.FindElementsInHostCoordinates(new Rect(20, 0, 480, 700), pivotItem))
{
if (element is Button)
{
Debug.WriteLine("{0}", ((Button)element).Content);
}
}
}
这有帮助吗?