Bonjour,
Je développe une application en Silverlight 4, et pour des besoins évidents je suis dans l'obligation de créer mes propres contrôles. Alors je risque de m'embrouiller entre Custom Control, ControlTemplate et UserControl mais ce que je souhaite c'est créer une fenêtre de chat personnalisable. Voila pour l'intro, et voici mon code de contrôle(désolé pour la longueur):
Et voici le Code-behind en 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
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 <Style TargetType="test:ChatWindow"> <Setter Property="Height" Value="640"/> <Setter Property="Width" Value="480"/> <Setter Property="Background" Value="White"/> <Setter Property="BorderBrush" Value="DarkGray"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="test:ChatWindow"> <Grid x:Name="CHAT_grid" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"> <Grid.RowDefinitions> <RowDefinition Height="25"/> <RowDefinition Height="*"/> <RowDefinition Height="30"/> </Grid.RowDefinitions> <Border Grid.RowSpan="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="2" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="4" Background="{TemplateBinding Background}"/> <Grid Grid.Row="0"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <TextBlock x:Name="Chat" Text="Chat to: " FontFamily="Georgia" FontWeight="Bold" Foreground="White" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="4"/> <ComboBox x:Name="Friend_chat_list" Width="90"/> </StackPanel> <Button x:Name="CloseButton" Content="X" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="4"/> </Grid> <Grid Grid.Row="1"> <ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="4"/> </Grid> <Grid Grid.Row="2"> <TextBox x:Name="UserMessage" Height="20" Width="120" HorizontalAlignment="Left" Margin="4" /> <Button x:Name="SendMessage" Content="Send!" Width="70" Height="20" HorizontalAlignment="Right" Margin="4"/> </Grid> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
Voici mon appel a mon contrôle:
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
49
50
51
52 namespace test { public class ChatWindow : ContentControl { public event EventHandler<EventArgs> WindowClosed; private TextBox _inputText; private Button _sendButton; private Button _closeButton; private ComboBox _friendList; public ChatWindow() : base() { DefaultStyleKey = typeof(ChatWindow); } public override void OnApplyTemplate() { base.OnApplyTemplate(); _inputText = GetTemplateChild("UserMessage") as TextBox; _sendButton = GetTemplateChild("SendMessage") as Button; _friendList = GetTemplateChild("Friend_chat_list") as ComboBox; _closeButton = GetTemplateChild("CloseButton") as Button; DefineButtonsEvents(); } private void DefineButtonsEvents() { if (_closeButton != null) _closeButton.Click += new RoutedEventHandler(closeButton_Click); } private void closeButton_Click(object sender, RoutedEventArgs e) { OnWindowClosed(); } protected virtual void OnWindowClosed() { EventHandler<EventArgs> handler = WindowClosed; if (handler != null) { Debug.WriteLine("Est entre ici"); handler(this, EventArgs.Empty); } } } }
Comme vous avez pu le voir dans le xaml Je dispose d'une ComboBox, d'un bouton pour fermer, d'un ScrollViewer, d'une Textbox et d'un bouton d'envoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <test:ChatWindow Height="300" Width="200" Background="DarkBlue" BorderBrush="Black" Grid.Row="3" />
J'ai essayer en suivant ce tuto, et ca m'a beaucoup aider dans un premier temps, mais alors pour les gestions d'évènements je ne comprends plus rien. J'ai essayer plusieurs choses différentes, comme dans le code C# ci-dessus, mais rien ne fonctionne.
Donc si quelqu'un pouvait m'indiquer un lien ou me montrer comment gérer un simple évènement dans un custom control, et changer/appeler les propriétés de celui-ci d'un autre endroit je lui en serais grandement reconnaissant.
Partager