我有一个Pivot
控件。我想要一个特殊的行为 - 每当用户点击当前选择的PivotItem
的标题时,我想对此作出反应。但是,当点击的标题不属于当前选定的枢轴项时,不会发生此反应。
我的计划如下:
为每个PivotItem
创建一个自定义标头,并将其tap事件与处理程序关联:
<phone:PivotItem DataContext="{Binding}" ContentTemplate="{StaticResource MyTemplate}" Content="{Binding}" x:Name="itemA">
<phone:PivotItem.Header>
<TextBlock x:Name="headerA" Text="A" Tap = "HeaderA_Tapped"/>
</phone:PivotItem.Header>
</phone:PivotItem>
在处理程序中,测试当前是否选择了轻敲项目,如果是,则做出反应:
protected void HeaderA_Tapped(object sender, GestureEventArgs e)
{
if (mainPivot.SelectedItem.Equals(itemA))
{
//selected item is the same pivotItem that reported tapping event
react();
}
}
这看起来非常简单,但在尝试之后我发现只有选择更改事件后才会报告点击事件。在用户点击当前未选择的pivotItem标头的情况下,枢轴将相应地更改选择(我想要保留的默认行为),然后它才会报告点击事件。但是,这对我的代码来说太晚了,因为在那一刻,点击的标题和当前选择的项目已经相同。
有什么方法可以检测水龙头是否启动了选择更改?或者有没有办法恢复事件的顺序?我想目前WP事件模型将事件从Visual Tree的根部下拉到叶子 - &gt;因此Pivot
可以更快地处理它,然后它才会转到标题TextBlock
。
答案 0 :(得分:1)
我认为你应该跟踪Pivot SelectedIndex并使用Timer更新Selection_Changed事件中的SelectedIndex。 有些人认为是这样的:
int selectedIndex;
func Selection_ChangedEvent()
{
//use a timer to update selectedIndex
//something like: Timer.do(selectedIndex = Pivot.SelectedIndex, 100)
//fire after a specify time. adjust this for the best result.
}
在您的点击活动中
HeaderA_Tapped()
{
if(selectedIndex == "index of item A in Pivot")
{
react();
}
}
答案 1 :(得分:0)
创建Pivot选择已更改事件
<phone:Pivot Title="MY APPLICATION" x:Name="MainPivot" SelectionChanged="Pivot_SelectionChanged">
将事件处理程序添加到 cs 文件
private void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
switch (MainPivot.SelectedIndex)
{
case 0:
// do something
break;
case 1:
//do something
break;
}
}
有关详细信息,请参阅此搜索 https://www.google.co.in/?gfe_rd=cr&ei=Y1XdVZruLqfG8AfUuquIAQ&gws_rd=ssl#q=wp8+c%23+pivot+selectionchanged