Laden...

von canvas ableiten - Elemente werden nicht dargestellt

Erstellt von thefiloe vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.045 Views
T
thefiloe Themenstarter:in
87 Beiträge seit 2010
vor 12 Jahren
von canvas ableiten - Elemente werden nicht dargestellt

Als erstes Entschuldigung, dass ich euch permament mit solchen Fragen löchere, doch bin neu was WPF angeht und stoße oft auf komische Probleme ...

Also das Ziel:
Ich will eine Klasse die von Canvas ableitet. Das ist ja alles noch kein Problem.
Nun wollte ich mit einer VisualCollection Elemente hinzufügen und wieder entfernen.
Das hatte ich dann im Konstruktor so:

        public DrawingContainer()
        {
            InitializeComponent();
            Image = Utils.GetResourceImage("Images/Default.png");
            ((ImageBrush)this.Background).ImageSource = backgroundSource;
            this.visualCollection = new VisualCollection(this);

            Rectangle rect = new Rectangle
            {
                Width = 200,
                Height = 200,
                Stroke = Brushes.Red,
                StrokeThickness = 5,
                Fill = Brushes.Black
            };
            visualCollection.Add(rect);
        }

So dies hat nicht funktioniert, da einfach nichts dargestellt wird. Ach ja und folgendes wurde natürlich überschrieben:

        protected override int VisualChildrenCount
        {
            get
            {
                return visualCollection.Count;
            }
        }

        protected override Visual GetVisualChild(int index)
        {
            if (index < 0 || index >= visualCollection.Count)
            {
                throw new ArgumentOutOfRangeException("index");
            }

            return visualCollection[index];
        }

So nun wie gesagt wurde einfach nichts angezeigt. Also habe ich gegoogelt und bin hier drauf gestoßen:
http://social.msdn.microsoft.com/Forums/en/wpf/thread/b7cff1eb-4f31-4d6b-92ad-6f80f5fbdd57
Also habe ich diesen Code probiert, da es hier soweit ich beim Überfliegen gesehen hatte mehr um Performance ging und nicht die Rede von "es wird nichts dargestellt war".
Das Resultat ist wenig überraschend. Auch dies schlug fehl. Es wird nichts angezeigt. Das Problem ist jetzt eben ich habe keine Ahnung an was es liegt, da ich ja auch keine Fehler oder Exceptions habe.

Der XAML-Tree sieht so aus:

<Canvas x:Class="Snipping.DrawingContainer"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:my="clr-namespace:Snipping"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Canvas.Background>
        <ImageBrush ImageSource="/Snipping%2b%2b;component/Images/Default.png" Stretch="Uniform" TileMode="None" />
    </Canvas.Background>
</Canvas>

Ich hoffe also, dass ihr mir da weiterhelfen könnt 😃

5.742 Beiträge seit 2007
vor 12 Jahren

Ich will eine Klasse die von Canvas ableitet. Das ist ja alles noch kein Problem.

Vermutlich schon 😉
Verwende besser ein Template - von Layoutcontainern abzuleiten ist äußerst selten eine gute Idee.

T
thefiloe Themenstarter:in
87 Beiträge seit 2010
vor 12 Jahren

in diesem fall ist dies jedoch erforderlich.
und das hat man auch schon gemacht:
http://www.codeproject.com/Articles/22776/WPF-DrawTools
und auf so etwas ähnliches will ich eben auch aus.

5.742 Beiträge seit 2007
vor 12 Jahren

und auf so etwas ähnliches will ich eben auch aus.

Dann verwende entweder das als Grundlage oder Databinding in Kombination mit Templates.

T
thefiloe Themenstarter:in
87 Beiträge seit 2010
vor 12 Jahren

ich verwende ja das als grundlage und bin auch der meinung ich habe es so wie es dort ist (also als Ansatz) doch bin ich absolut ratlos wieso das nicht hinhaut.
Ich habe den Code mehrmals genau durchgeschaut und sonst gesucht und probiert. aber es ist mir ein Rätzel 😦

Ok aus irgendeinem Grund funktioniert das mit dem Rectangle nicht.
Ich habe jetzt ein DrawingVisual objekt erstellt und dort mit einem Drawingcontext raufgezeichnet --> funktioniert.

446 Beiträge seit 2004
vor 12 Jahren

Von Canvas ableiten sollte kein Problem sein.

Warum fügst du deine Controls nicht über Children.Add() ein?

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