Bonjour chers amis développeurs;
dans mon application j'ai un ResourceDictionary " DesignerItem" où je de définie un Control Template "<ControlTemplate x:Key="ConnectorDecoratorTemplate" TargetType="{x:Type Control}">" , ce Control Template me permet d'avoir des points sur mes objets de type "DesignerItem" pour tracer des lignes entre ces point par la suite. Pour cela ce control template est appéllé dans le style définie pour les objets "DesignerItem".
ce que je veux faire maintenant c'est de pourvoir définir ou modifier le Control template"<ControlTemplate x:Key="ConnectorDecoratorTemplate" TargetType="{x:Type Control}">" dans le code source codeBehind car le nombre de point qui permet de dessiner une ligne est dynamique, chaque objet a nombre différents de points... le nombre de points qui vont être représentes par le control Template n'est connu que lorsque l’utilisateur fait un drop d'un objet sur un canvas, donc c'est a ce moments la que je veux intervenir pour modifier le controle Template pour avoir les points sur cet objet !!.
je ne sais pas si cela est faisable ou pas ??? :'( ... je ne sais pas si je dois parser du code xaml dans mon control template ou comment je dois faire ......
SVP, aidez moi !!
voila mon code XAML
Code xaml : 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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:s="clr-namespace:DiagramDesigner" xmlns:c="clr-namespace:DiagramDesigner.Controls"> <!-- Connector Style --> <!-- les Connector son les points qui nous permet des tracer les lignes--> <Style TargetType="{x:Type s:Connector}"> <Setter Property="Width" Value="8"/> <Setter Property="Height" Value="8"/> <Setter Property="Cursor" Value="Cross"/> <Setter Property="SnapsToDevicePixels" Value="true"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type s:Connector}"> <Grid > <!-- transparent extra space makes connector easier to hit --> <!--c un carrer qui nous permet de dessiner la line entre les object--> <Rectangle Fill="red" Margin="-2"/> <Rectangle Fill="Red" StrokeThickness="5" Stroke="#AA000080"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <!-- la partie suivante c'est la partie qui me me pose un probleme, c'est la partie que je veux la modifer a partir du code source --> <!-- ConnectorDecoratorTemplate Default Template --> <ControlTemplate x:Key="ConnectorDecoratorTemplate" TargetType="{x:Type Control}"> <Grid x:Name="LesPointDeConnexion"><!-- les point qui me permet de tracer des lignes--> <Grid.RowDefinitions> <RowDefinition Height="0.5*"/> <RowDefinition Height="0.5*"/> </Grid.RowDefinitions> <s:Connector Orientation="Left" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5" Grid.Row="0"/> <s:Connector Orientation="Left" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5" Grid.Row="1"/> </Grid> </ControlTemplate> <!-- DesignerItem Style --> <Style TargetType="{x:Type s:DesignerItem}"> <Setter Property="MinWidth" Value="10"/> <Setter Property="MinHeight" Value="10"/> <Setter Property="SnapsToDevicePixels" Value="True"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type s:DesignerItem}"> <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"> <!-- PART_DragThumb --> <c:DragThumb x:Name="PART_DragThumb" Cursor="SizeAll"/> <!-- PART_ResizeDecorator --> <Control x:Name="PART_ResizeDecorator" Visibility="Collapsed" Template="{StaticResource ResizeDecoratorTemplate}"/> <!-- PART_ContentPresenter --> <ContentPresenter x:Name="PART_ContentPresenter" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="{TemplateBinding ContentControl.Content}" Margin="{TemplateBinding ContentControl.Padding}"/> <!-- PART_ConnectorDecorator --> <Control x:Name="PART_ConnectorDecorator" Visibility="Visible" Template="{StaticResource ConnectorDecoratorTemplate}"/> </Grid> <ControlTemplate.Triggers> <DataTrigger Value="True" Binding="{Binding RelativeSource={RelativeSource Self},Path=IsGroup}"> <Setter TargetName="PART_DragThumb" Property="Visibility" Value="Collapsed"/> </DataTrigger> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Value="True" Binding="{Binding RelativeSource={RelativeSource Self},Path=IsSelected}"/> <Condition Value="{x:Static sys:Guid.Empty}" Binding="{Binding RelativeSource={RelativeSource Self},Path=ParentID}"/> </MultiDataTrigger.Conditions> <Setter TargetName="PART_ResizeDecorator" Property="Visibility" Value="Visible"/> </MultiDataTrigger> <Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="PART_ConnectorDecorator" Property="Visibility" Value="Visible"/> </Trigger> <DataTrigger Value="True" Binding="{Binding RelativeSource={RelativeSource Self},Path=IsDragConnectionOver}"> <Setter TargetName="PART_ConnectorDecorator" Property="Visibility" Value="Visible"/> </DataTrigger> <DataTrigger Value="True" Binding="{Binding RelativeSource={RelativeSource Self},Path=IsGroup}"> <Setter TargetName="PART_ConnectorDecorator" Property="Visibility" Value="Hidden"/> </DataTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary>
Donc ce que je veux est de modifier le control Template qui porte x:Key="ConnectorDecoratorTemplate" dans le code source pour pouvoir l'adapter selon le nombre de point de l'objet.
En fichier attaché une image qui représente le résultat actuel.
Merci bien mes chers amis![]()
Partager