Laden...

UserControl auf Canvas verschieben

Erstellt von Briefkasten vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.192 Views
Briefkasten Themenstarter:in
446 Beiträge seit 2004
vor 12 Jahren
UserControl auf Canvas verschieben

Hallo,

hab schon länger nichts mehr mit c# udn WPF gemacht und bin ein bisschen eingerostet. Ich versuche in einer custom controly libary ein canvas zu erstellen auf dem die controls verschoben werden können.

Ich orientiere mich an diesem Beispiel: WPF Diagram Designer: Part 1

Mein Template sieht so aus:

 <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:GraphVisualization}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                        <Canvas Background="{TemplateBinding Background}" x:Name="_Canvas">
                            <Canvas.Resources>
                                <ControlTemplate x:Key="DesignerItemTemplate" TargetType="ContentControl">
                                    <Border DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" BorderBrush="Transparent" BorderThickness="0">
                                        <StackPanel Background="Green">
                                           das <!--Here we place our MoveAbelItem control to give the contentpresenter the ability that it can be moved-->
                                            <local:MoveAbelItem Cursor="SizeAll"/>
                                            <!--The ContentPresenter can be for example the VertexVisualization control -->
                                            <ContentPresenter Content="{TemplateBinding ContentControl.Content}" />
                                        </StackPanel>
                                    </Border>
                                </ControlTemplate>
                            </Canvas.Resources>
                            <ContentControl Template="{StaticResource DesignerItemTemplate}"></ContentControl>
                        </Canvas>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

Im Codebehind füge ich über


 Canvas.Children.Add(vertexcontrol);

mein control hinzu was auch klappt. Aber anscheinend, erhält dieses Control nicht den ContentControlStyl DesignerItemTemplate, weil die Controls keinen grünen Hintergrund haben. Außerdem müsste sich der Maus Cursor ändern.

Hat jemand eine Idee warum die hinzugefügten Controls nicht das ControlTemplate DesignerItemTemplate zugewiesen bekommen (sollte ja auto. gehen, weil sie im Canvas.Content sind)?

LG

brief

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

Briefkasten Themenstarter:in
446 Beiträge seit 2004
vor 12 Jahren

Ich musste "um" das vertexcontrol logischerweise das ContentControl legen. Außerdem muss man, die Propertie Template im Codebehind manuel festlegen. Ich ging davon aus, dass wenn der Style wie folgt definiert ist

<ControlTemplate TargetType="ContentControl">

auto. an alle ContentControls hinzugefügt wird (also auch die Controls welche ich zut Laufzeit im Codebehind anlege), was dem aber so nicht ist.

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp