none
Modifier Control Template dans le code Behind WPF/C# RRS feed

  • Question

  • 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 de d'avoir des points sur mes objets de type "DesignerItem" pour tracer des lignes entre ces point par la suit. 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 

     
     
    <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( je veux le mm resultat en definissant le controle template dans le code C#)



    Merci bien mes chers amis 

    • Déplacé Aurel Bera lundi 14 juillet 2014 07:24 OnTopic
    dimanche 13 juillet 2014 19:03

Toutes les réponses