Bonjour,

J'ai une ListBox avec dedans un certains nombre d'éléments (dont un TextBlock) que j'ai mis en forme via un template.
Ce que j'aimerai, c'est que sur un double clic sur mon ListBoxItem, je puisse éditer mon TextBlock (et il redevient non éditable à la perte du focus, mais ça). Et quand le TextBlock perd le focus, le tout repasse en "lecture seule".

Vu que je n'ai pas trouvé de moyen "symple", de gérer les évènements sur des ListBoxItems, j'ai rajouté des handlers :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
            EventManager.RegisterClassHandler(typeof(ListBoxItem), ListBoxItem.MouseLeftButtonDownEvent, new RoutedEventHandler(lbiLeftButtonDownHandler));
            EventManager.RegisterClassHandler(typeof(ListBoxItem), ListBoxItem.MouseLeftButtonUpEvent, new RoutedEventHandler(lbiLeftButtonUpHandler));
            EventManager.RegisterClassHandler(typeof(ListBoxItem), ListBoxItem.MouseLeaveEvent, new RoutedEventHandler(lbiLeaveEventHandler));
            EventManager.RegisterClassHandler(typeof(ListBoxItem), ListBoxItem.MouseDoubleClickEvent, new RoutedEventHandler(lbiDoubleClickEventHandler));

Et sur le doubleclic, que je récupère bien, j'aimerai rendre mon textblock éditable (a la rigueur, le cacher et afficher un textbox à la place, ca m'irait aussi). Mais le problème, c'est que je n'arrive pas à acceder a mon TextBox "tbListCardText".

Le code du template :
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
 
        <DataTemplate 
            x:Key="CardTemplate"
            DataType="{x:Type local:Card}">
            <Border Background="Transparent"
					BorderBrush="DarkGray"
					BorderThickness="0,0,0,0"
					Padding="2">
                <!-- Contenu d'une carte -->
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="10" Name="cardKeywordColumn" />
                        <ColumnDefinition Width="10" />
                        <ColumnDefinition Width="50*" />
                    </Grid.ColumnDefinitions>
                    <Rectangle Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top" Name="rectLabel" Stroke="{x:Null}" Width="10" Height="{Binding MainWindow.cardHeight}" Fill="{Binding colorText}" />
                    <Rectangle Grid.Column="1" HorizontalAlignment="Left" Stroke="{x:Null}" Width="9" Fill="#00000000" />
                    <TextBlock Grid.Column="2" Name="tbListCardText" Text="{Binding text}" Background="{Binding colorText}" />
                    <Rectangle Grid.Column="2" HorizontalAlignment="Right" Width="2" Margin="4" Name="rectangle2" Stroke="Black" Fill="Black" FlowDirection="RightToLeft" />
                </Grid>
            </Border>
        </DataTemplate>
Le code de la fonction appelée quand je fait un doubleclick :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
        private void lbiDoubleClickEventHandler(object sender, RoutedEventArgs e)
        {
            ListBoxItem item = (ListBoxItem)sender;
            if (item.Content is Card)
            {
                //MessageBox.Show("DoubleClick !");
                Card currentCard = (Card)item.Content;
                //tentative qui ne fonctionne pas :
                //TextBlock tb = (TextBlock)item.Template.FindName("tbListCardText", item);
                //tb.Visibility = false; = "AAAAAAAAAAAAAAAAAAAAAAAA";
            }
        }
Donc, comment faire pour accéder à mon élément ?
Merci d'avance ! (et s'il existe une méthode moins... crade ? pour acceder aux events des ListBoxItems, je prends aussi...).

Merci d'avance !