Bonjour,
Je viens avec une petite énigme que j'espère vous pourrez m'aider à résoudre.
Je tente de créer un popup pour faire de l’auto-complétion, mais pour une raison que j'ignore le popup n'apparait pas quand je lance le programme.
depuis le concepteur je peux voir le popup quand je clique dessus dans le code XAML mais quand je lance le programme rien à faire, il n'apparaît pas. J'ai tenté de jouer sur l'indice Z des éléments, j'ai même tenté de mettre un textblock "test" à l'intérieur mais rien à faire.
voici le xaml:
et le C#:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <Grid x:Name="popupEditorGrid" Grid.Column="1" Panel.ZIndex="10" Visibility="Visible"> <Popup Placement="Top" Visibility="Visible" StaysOpen="True" IsOpen="true" Panel.ZIndex="1000" x:Name="EditorPopup" Grid.Column="1" Width="{Binding Path=ActualWidth, ElementName=editorInputColumn}"> <StackPanel x:Name="EditorPopupStackPanel"> <StackPanel.Background> <SolidColorBrush Color="{DynamicResource EllipseSecondary}"/> </StackPanel.Background> <TextBlock Text="test"/><!--ce textblock est un test, il apparait dans le concepteur mais pas quand le programme tourne...--> </StackPanel> </Popup> </Grid> <TextBox Grid.Column="1" KeyUp="editorAddInput_KeyUp" x:Name="editorAddInput" > <TextBox.BorderBrush> <SolidColorBrush Color="{DynamicResource BoutonMarge}"/> </TextBox.BorderBrush> </TextBox>
L'idée est de proposer à l'utilisateur des noms déjà connus qui commencent par les mêmes lettres, qui sera ensuite rajouté dans la textbox si il sélectionne le nom dans le popup.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 private void editorAddInput_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) { string lastInput; //La textbox de saisie est prévue pour pouvoir récupérer plusieurs noms et les séparer, ici je veux donc récupérer uniquement le dernier de la liste List<string> inputList = editorAddInput.Text.ToUpper().Split(',', ';').ToList(); if (inputList.Count != 0) { lastInput = inputList[inputList.Count - 1]; } else { lastInput = editorAddInput.Text; } List<Editor> matchingEditorsList = new List<Editor>(); //Vide la liste précédente EditorPopupStackPanel.Children.Clear(); foreach(Editor editor in localEditorsList)//Cherche dans la liste des tous les éditeurs connus jusqu'ici { if(editor.Name.StartsWith(lastInput)) { matchingEditorsList.Add(editor); } } if(matchingEditorsList.Count!=0) { EditorPopup.Visibility = Visibility.Visible; foreach(Editor editor in matchingEditorsList) { EditorPopupStackPanel.Children.Add(new TextBlock() { Text = editor.Name }); } EditorPopup.StaysOpen = true; EditorPopup.IsOpen = true; } else { EditorPopup.Visibility = Visibility.Collapsed; EditorPopup.IsOpen = false; } }
Quelqu'un à une idée de pourquoi ce popup n'apparaît pas?
Partager