L'accent sur le premier élément de la première LongListSelector à l'intérieur d'un Pivot
-
21-12-2019 - |
Question
J'ai un rapport à remplir, qui est composé d'un List
de sections, dont chacune a un List
de questions.Ma version actuelle utilise un Pivot
contrôle dont ItemsSource
est définie à l' List
des articles et DataTemplate
est un LongListSelector
dont ItemsSource
est définie à l' List
de questions.
Lorsque l'utilisateur tente de soumettre le rapport, je boucle sur toutes les questions de vérification de leur validité.Si revenir invalide, un indicateur est défini et un message d'erreur est affiché à côté de la question.
Je voudrais être en mesure de se concentrer sur la première question, qui a le drapeau, mais ne peut pas comprendre comment faire pour obtenir une référence à la nécessaire LongListSelector
de sorte que je peux appeler cela de l' ScrollTo
la méthode.
Code:
Vue
<phone:Pivot toolkit:TurnstileFeatherEffect.FeatheringIndex="0"
Name="QuestionPivot"
ItemsSource="{Binding Sections, Mode=TwoWay}">
<phone:Pivot.Title>
<TextBlock>
<Run Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}"/>
<Run Text=" "/>
<Run Text="{Binding Path=LocalizedResources.DailyReport, Source={StaticResource LocalizedStrings}}"/>
<Run Text=" - "/>
<Run Text="{Binding ProjectName}"/>
</TextBlock>
</phone:Pivot.Title>
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding SectionName}"/>
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<phone:LongListSelector ItemsSource="{Binding Questions, Mode=TwoWay}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0 0 0 20">
...
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
Code Derrière (y compris mon échec de la tentative de jeter le SelectedItem à un LongListSelector...)
private void FocusOnFirstInvalid(object sender, EventArgs e)
{
int selectedItem = 1;
foreach (ReportDraftSection s in QuestionPivot.Items)
{
foreach(ReportQuestion q in s.Questions)
{
if(q.IsNotValid)
{
QuestionPivot.SelectedIndex = selectedItem;
var l = (LongListSelector)QuestionPivot.SelectedItem;
l.ScrollTo(q);
}
}
selectedItem += 1;
}
}
Toute aide serait grandement appréciée.
La solution
Depuis la Pivot ItemsSource
une Liste de Section
, QuestionPivot.SelectedItem
contient un Section
objet au lieu de le LongListSelector.Vous pouvez essayer d'utiliser ItemContainerGenerator
pour obtenir PivotItem de SelectedItem
, puis obtenir le LongListSelector de PivotItem de l' Content
(pas encore testé) :
.......
QuestionPivot.SelectedIndex = selectedItem;
var pivotItem = (PivotItem)QuestionPivot
.ItemContainerGenerator
.ContainerFromItem(QuestionPivot.SelectedItem);
var l = (LongListSelector)pivotItem.Content;
l.ScrollTo(q);
.......