Laden...

Forenbeiträge von topperdel Ingesamt 67 Beiträge

13.12.2010 - 20:32 Uhr

Ok, jetzt klappt's!
Aus irgendeinem Grund habe ich keinen Submit-Button bekommen, sondern ein Eingabefeld. Ich weiß nicht mehr, was ich da anderes stehen hatte. Mit dem Submit-Button kriege ich den ausgewählten Wert gepostet.

Damit sollte dann klappen, was ich vorhabe.

Danke für eure Hilfe! Vielen Dank!

13.12.2010 - 20:26 Uhr

Danke für eure Antworten!

Ich krieg's aber immer noch nicht hin.

  1. Problem: Kann ich mehrere BeginForms in einer Seite haben? Oder müsste ich dann alle vier Fragenblöcke in eine Form packen (wäre ja kein Problem).
  2. Problem - das richtige: wie kriege ich den Wert "gepost-backed"? Ich navigiere mit ActionLinks zwischen den Views, aber da bekomme ich den answer-Parameter nicht gefüllt, der ist immer null.

Steh ich wirklich so auf dem Schlauch?

Danke für eure Bereitschaft zu helfen!

12.12.2010 - 23:31 Uhr

Hallo Stipo!

Danke für deine Antwort.
Kannst du mir noch ein wenig bei der konkreten Umsetzung helfen? Wie könnte ich mein Object an den Radiobutton binden? Bei MVC 2 gibt es ja keine Code-Behinds mehr, wie kriege ich da die Logik unter? Ich will das eben nicht dann alles in der Action des Controls abhandeln sondern hätte gerne ein Control, das mir einfach den gewählten Buchstaben zurückliefert.
Hast du da eine Implementierungsidee?

Danke!

Viele Grüße

TopperDEL

12.12.2010 - 13:50 Uhr

Hallo zusammen!

Ich brauche ein User-Control für folgenden Anwendungsfall:
ich möchte einen "Fragenblock" anzeigen. Das heißt, ich habe ein Question-Objekt, das immer 4 Answers enthält. Jede Antwort besteht aus einem Text und einem Buchstabenwert. Von den 4 Antworten kann und muss nur eine ausgewählt werden (Radiobuttons). Von der selektierten Antwort möchte ich den Buchstaben wegspeichern.
Es sieht also grob so aus:
O Antwort 1
O Antwort 2
O Antwort 3
O Antwort 4

Es gibt mehr Buchstaben als mögliche Antworten pro Frage. Es kann also sein, dass Antwort 1 den Buchstaben A, 2 B, 3 C und 4 D entspricht. Kann aber auch 1=N, 2=X, 3=A und 4=B sein.

Wie kriege ich das so mit einem Benutzersteuerelement umgesetzt, dass ich nur mein Question-Objekt reingebe und ich bei einer Post-Back-Action für den Fragenblock (es können bis zu vier davon auf einer Seite sein) den gewählten Buchstaben bekomme?
Ich steh total auf dem Schlauch und komme mit dem Benutzersteuerelement-Konzept von MVC2 nicht zurecht. Ich freue mich über jeden Hinweis!

Viele Grüße und Danke!

TopperDEL

15.06.2010 - 09:28 Uhr

Naja, ich wollte alles in einer Anwendung haben. Mir erschien das Konzept Anfangs nicht ungewöhnlich oder unpassend. Aber mittlerweile habe ich auch das Gefühl, dass eine externe Anwendung mit Zugriff auf die Datenbank da besser wäre.

14.06.2010 - 23:32 Uhr

Hallo zusammen!

Ich habe folgendes Problem: ich habe eine kleine Webseite entwickelt für meine Theatergruppe, bei der sich die Mitglieder zu Auftritten, Trainings etc. eintragen können. Und ich möchte dabei über bestimmte Tasks bestimmte Situationen prüfen und daraufhin Infomaisl verschicken. Wenn etwa 7 Tage vor einem Auftritt noch Spieler fehlen, dann sollen die informiert werden, die sich dazu noch nicht geäußert haben.

Das reine Suchen und verschicken der nötigen Infos funktioniert. Aber ich habe ein Problem mit dem Task: aktuell habe ich eine Klasse geschrieben, die ich in der global.asax.cs in der Methode Application_Start aufrufe. Dort wird ein eigener Thread gestartet, der jede Minute prüft, ob jetzt (DateTime.Now) plus 7 Tage ein Auftritt stattfindet. Dieser wird geprüft (stimmt die Anzahl der nötigen Spieler mit den Anmeldungen überein etc.) und daraufhin eine Mail verschickt oder nicht.
Manchmal klappt es. Manchmal kommt aber auch keine mail oder sie kommt doppelt.

Wie kriege ich denn da eine gescheite überprüfung hin? Anders: wie kann ich sicher sein, dass eine bestimmte Aufgabe einmal pro Minute ausgeführt wird - nicht öfter und nicht seltener?
Irgendwie dreh ich mich da im Kreis. Wie habt ihr das denn so gelöst?

Das einzige, was mir noch einfällt ist: bei Terminen ein "Auf Task XY geprüft"-Flag einzufügen und den TaskTimer etwa auf 30 Sekunden setzen. Dadurch würde es öfter geprüft, aber die mail nur verschickt, wenn das Flag noch nicht gesetzt war. Aber da vermisse ich dann ja verschiedene Daten. Und eine extra Tabelle dafür aufzusetzen "müllt" mir ja die Datenbank zu.

Ich bin für jede Idee dankbar!

Viele Grüße

TopperDEL

03.02.2010 - 12:13 Uhr

Ok, danke für den Hinweis. So tut's aber das, was es soll. 😉

Muss mich aber mit den Attached-Sachen mal mehr beschäftigen. Da steckt ja ungeheuerlich viel Potential dahinter!

Viele Grüße und Danke

TopperDEL

03.02.2010 - 09:53 Uhr

Mit dem AttachedBehaviour hat es funktioniert! Wen der Code dazu interessiert, hier ist er:


public static class StartAnimationOnMouseDirectlyOverDragBehaviour
    {
        public static Storyboard GetAnimationToStartWhenDragging(FrameworkElement element)
        {
            return (Storyboard)element.GetValue(AnimationToStartWhenDraggingProperty);
        }

        public static void SetAnimationToStartWhenDragging(FrameworkElement element, Storyboard value)
        {
            element.SetValue(AnimationToStartWhenDraggingProperty, value);
        }

        public static readonly DependencyProperty AnimationToStartWhenDraggingProperty =
            DependencyProperty.RegisterAttached(
            "AnimationToStartWhenDragging",
            typeof(Storyboard),
            typeof(StartAnimationOnMouseDirectlyOverDragBehaviour),
            new UIPropertyMetadata(null, OnAnimationToStartWhenDraggingChanged));

        static void OnAnimationToStartWhenDraggingChanged(
          DependencyObject depObj, DependencyPropertyChangedEventArgs e)
        {
            FrameworkElement element = depObj as FrameworkElement;
            if (element == null)
                return;

            if (e.NewValue is Storyboard == false)
                element.DragEnter -= new DragEventHandler(element_DragEnter);
            else
                element.DragEnter += new DragEventHandler(element_DragEnter);
        }

        public static Storyboard GetAnimationToStartWhenDragEnd(FrameworkElement element)
        {
            return (Storyboard)element.GetValue(AnimationToStartWhenDragEndProperty);
        }

        public static void SetAnimationToStartWhenDragEnd(FrameworkElement element, Storyboard value)
        {
            element.SetValue(AnimationToStartWhenDragEndProperty, value);
        }

        public static readonly DependencyProperty AnimationToStartWhenDragEndProperty =
            DependencyProperty.RegisterAttached(
            "AnimationToStartWhenDragEnd",
            typeof(Storyboard),
            typeof(StartAnimationOnMouseDirectlyOverDragBehaviour),
            new UIPropertyMetadata(null, OnAnimationToStartWhenDragEndChanged));

        static void OnAnimationToStartWhenDragEndChanged(
          DependencyObject depObj, DependencyPropertyChangedEventArgs e)
        {
            FrameworkElement element = depObj as FrameworkElement;
            if (element == null)
                return;

            if (e.NewValue is Storyboard == false)
            {
                element.DragLeave -= new DragEventHandler(element_DragLeave);
                element.PreviewDrop -= new DragEventHandler(element_Drop);
            }
            else
            {
                element.DragLeave += new DragEventHandler(element_DragLeave);
                element.PreviewDrop += new DragEventHandler(element_Drop);
            }
        }

        static void element_Drop(object sender, DragEventArgs e)
        {
            if (sender is FrameworkElement == false)
                return;

            FrameworkElement element = sender as FrameworkElement;

            GetAnimationToStartWhenDragEnd(element).Begin(element);
        }

        static void element_DragLeave(object sender, DragEventArgs e)
        {
            if (sender is FrameworkElement == false)
                return;

            FrameworkElement element = sender as FrameworkElement;

            GetAnimationToStartWhenDragEnd(element).Begin(element);
            e.Handled = true;
        }

        static void element_DragEnter(object sender, DragEventArgs e)
        {
            if (sender is FrameworkElement == false)
                return;

            FrameworkElement element = sender as FrameworkElement;

            GetAnimationToStartWhenDragging(element).Begin(element);
            e.Handled = true;
        }

    }

Viele Grüße und Danke für die Idee, Lector!

TopperDEL

03.02.2010 - 08:52 Uhr

Danke, Lector, für deine Antwort!

An das e.Handled komme ich ja nicht ran, da sich das ganze nur im XAML abspielt und abspielen soll.

Aber die letzte Idee mit dem AttachecBehaviour sollte funktionieren. Das ist eine gute Idee! Ich werde das mal ausprobieren.

Viele Grüße

TopperDEL

02.02.2010 - 19:41 Uhr

Hi!

Ich habe eine geschachtelte Datenstruktur von normalen CLR-Objekten. Jedes Objekt bekommt ein eigenes HierarchicalDataTemplate. Soweit kein Problem.

Jetzt möchte ich, dass die HierarchicalDataTemplates auf ein DragEnter reagieren, indem sie eine Animation starten. Das funktioniert auch, nur wird die Animation auch bei dem Parent eines Elements gestartet, in dem sich die Maus mit dem Drag gerade befindet. Ich will aber, dass nur das unter dem Mauszeiger liegende Element (respektive dessen HierarchicalDataTemplate) die Animation durchführt.

Am leichtesten ginge es, wenn ich die Eigenschaft IsMouseDirectlyOver mit einem EventTrigger verbinden könnte. Aber dazu habe ich noch nichts im Netz finden können. Wie kriege ich es dann hin, dass nur das wirklich betroffene HierarchicalDataTemplate die Animation startet? Hat jemand eine Idee dazu?

Vielen Dank!

Viele Grüße

TopperDEL

31.01.2010 - 18:46 Uhr

Ich hab was gefunden!

In dem von mir verwendeten Mocking-Framework Moq gibt es eine Klasse It, die ich verwenden kann.

Der Test sähe dann etwa so aus:
_mockClass.Verify(e=>e.DoSomething(It.IsAny<ElementTwo>()));

Das reicht an sich aus, da ja die Klasse ElementTwo auch mit Unit-Tests abgedeckt ist und somit bspw. einen korrekten Konstruktor haben muss. Es wäre zwar schöner, wenn ich das ElementTwo im Test noch direkt prüfen könnte um zu sehen, ob die zu testende Klasse die Klasse nicht evtl. mit falschen Parametern füttert - aber für den Moment reicht das erstmal so.

Danke für deine Hilfe, winSharp!

Viele grüße

TopperDEL

31.01.2010 - 18:36 Uhr

Der oben angegebene Code ist der Produktivcode, der getestet werden soll. In meinem UnitTest habe ich die Klasse mit der Methode "DoSomething" gemockt, kann also theoretisch verifizieren, ob die Methode DoSomething mit einem bestimmten Parameter gerufen wurde. Das Problem ist ja aber, dass in der Methode ein neues Objekt erzeugt wird, das ich im Unit-Test nicht kenne - von daher kann ich nicht prüfen, ob die Methode das "ElementTwo" mit dem Parameter "element" erzeugt und "DoSomething" damit aufruft.

Ich dreh mich da irgendwie im Kreis.

Der Fall wäre klar, wenn die Methode so aufgebaut wäre:


public void FunctionToTest(string testString)
{
myClass.DoSomething2("lala");
}

Jetzt könnte ich in der gemockten Klasse myClass prüfen, ob DoSomething2 mit "lala" aufgerufen wurde.

Wurde mein Problem deutlicher?
Danke für deine Geduld!

31.01.2010 - 18:23 Uhr

winSharp93 - danke für deine Antwort!

DoSomething ist ja in einem Interface. Die Klasse, in der die Methode enthalten ist, ist bereits gemockt.
Kann ich mir nicht irgendwie vom Mocking-Framework den Parameter geben lassen, mit dem die Methode aufgerufen wurde? Dann könnte ich ja gegenprüfen...

31.01.2010 - 18:08 Uhr

Hi!

Kurze Frage, ich finde grad nicht die richtigen Suchwörter. Ich möchte eine Funktion mit einem UnitTest abdecken, die in sich ein Objekt erzeugt und eine im Test "gemockte" Klasse aufruft. Wie prüfe ich nun, dass die Methode ein bestimmtes Objekt an die Klasse übergibt?


public void FunctionToTest(IElementOne element)
{
_mockedClass.DoSomething(new ElementTwo(element));
}

Die _mockedClass hab ich im Test unter Kontrolle. Wie kann ich jetzt verifizieren, dass von der Klasse die Methode "DoSomething" mit einem neuen "ElementTwo" aufgerufen wurde?

Danke für eure Hinweise!

Viele Grüße

TopperDEL

30.01.2010 - 13:07 Uhr

Hallo!

Ich habe heute eine funktionierende ASP.Net MVC 2 Seite mit AJAX nachgerüstet. Konkret habe ich lediglich eine Index-View (mit einer Tabelle) so umgestellt, dass bei einer Aktion innerhalb einer Tabellenzeile (löschen etc.) nur die Tabelle neu geladen wird und nicht die gesamte Seite. Wenn ich das lokal auf dem localhost mit dem IE 8 teste, dann funktioniert es perfekt. Veröffentliche ich es auf den Server und probiere es mit dem IE 8 auf meinem Server, so tut sich nichts mehr. Ich bekomme lediglich mit den Entwicklerwerkzeugen einen Unbekannten Laufzeitfehler in MicrosoftMvcAjax.js.
Mit dem Firefox funktioniert es auch auf dem "echten" Server völlig problemlos. Wo ist für den IE8 da die Unterscheidung? Ich habe die entsprechende Domain auch schon zu den sicheren Seiten hinzugefügt, an irgendwelchen "ich vertrau dem Server nicht"-Dingen sollte es also nicht liegen.

Ich würde mich über Hinweise sehr freuen!

Viele Grüße

TopperDEL

P.S.: Ich werde etwas genauer:
Ich rufe von einem controller die Index-Action auf. Dort kommt meine Tabelle. In einer Zeile rufe ich nun eine andere Action auf, die etwas mit der gewählten Zeile tut und dann per RedirectToAction("Index") wieder auf die Index-Action springt. der Aufruf dieser Action erfolgt per Ajax und es sollte in dem Fall nur ein div-Tag mit der Tabelle zurückgeliefert werden.
Wenn ich nun den IE8 mit der Seite auf meinem Server starte kommt die Liste wie gewünscht. Ich klicke den Link in einer Zeile, es wird mir ein "Fehler auf der Seite" angezeigt (Unbekannter Laufzeitfehler in MicrosoftMvcAjax.cs Zeile 349, Zeichen 17). Mache ich jetzt mit F5 einen Reload, bekomme ich den div-Tag mit der Tabelle angezeigt, ohne CSS-forma-tierung etc. Also im Prinzip das, was Ajax hätte leifern sollen. Nach einem weiteren F5-Refresh ist wieder die gesamte und entsprechend durch den Link geänderte Seite da.
Vielleicht hilft das weiter...

25.01.2010 - 17:57 Uhr

Hallo zusammen,

kurze Frage: kennt sich jemand mit dem Adobe Reader hinsichtlich des PlugIn-Konzepts aus? Ist es möglich, ein C#-WPF-Control in eine PDF-Datei einzubetten bzw. bei der Anzeige einer PDF bestimmte Objekte (etwa ein Eingabefeld) durch ein C#-WPF-Control zu ersetzen?

Würde mich freuen, wenn mit dazu jemand Hinweise geben könnte, was in der Hinsicht möglich ist.

Vielen Dank!

Viele Grüße

TopperDEL

21.01.2010 - 16:30 Uhr

Ah, ok - danke! Das war genau die Info, die ich gesucht habe.

Hört sich so an, als müsste eigentlich alles funktionieren, was ich bräuchte. Die Einschränkung auf den IE ist an der Ecke nicht so wild.

Vielen Dank!

21.01.2010 - 12:20 Uhr

Hallo zusammen,

kurze Frage, vielleicht fällt jemanden Spontan was dazu ein: ich habe ein eigenes WPF-basierende-Steuerelement, das eigentlich für Desktop-Anwendungen gedacht ist. Ich wurde nun angefragt, ob man das auch in Webforms verwenden könnte.

Das Steuerelement ist - wie gesagt - WPF basierend, verwendet als Besonderheit den System.Windows.Ink-Namespace und ruft Popups auf. Könnte man das relativ einfach als Steuerelement etwa für eine ASP.Net-Seite verwenden? Oder stößt man dann an irgendwelche Grenzen etwa hinsichtlich der Benutzerrechte o.ä.? Ich kenn mich da leider nicht so gut aus.

Danke für eure Hinweise!

Viele Grüße

TopperDEL

16.11.2009 - 09:52 Uhr

Hallo Flo,

danke für deine Hilfe! Jetzt bin ich ein bisschen schlauer. 😉

Viele Grüße

TopperDEL

15.11.2009 - 22:50 Uhr

Hallo Flo!

Danke für deine Antwort.
Das hört sich aber nicht gerade simpel an. Gibt es da noch nichts automatisches?

Bei einer Software geht das ja noch. Beim Start der Software einfach auf den aktuellen Stand der DB prüfen und notfalls ein Skript ablaufen lassen. Aber bei einer ASP.Net-Anwendung? Der klatscht mir doch beim Veröffentlichen einfach die Datenbank über die bestehende, oder?

Viele Grüße

TopperDEL

15.11.2009 - 11:22 Uhr

Hallo zusammen!

Ich arbeite mit gerade in ASP.Net MVC ein. Ich erstelle meine Datenbank (mit welchem Provider auch immer), mache mein Entity Framework-Model draus und lege los. Alles bestens.
Jetzt veröffentliche ich die Webseite, Leute benutzen Sie und füllen die Datenbank. Was ist nun, wenn ich die Webseite erweitern will und dafür die Datenbank erweitern muss. Kopiert er mir die neue - aber leere - Datenbank auf die bestehende auf dem Server? Bzw. wie ist der Best-Practise, um eine bestehende Datenbank mit verändertem Schema zu aktualisieren? Muss ich mir manuell die SQL-Skripte für die Änderungen an der Datenbank erstellen? Und wer kümmert sich drum, dass die Datenbank dann auch entsprechend angepasst wird?

Würde mich freuen, wenn mir jemand erzählen könnte, wie man das denn als Profi macht. 😉 Danke!

Viele Grüße

TopperDEL

12.11.2009 - 09:04 Uhr

Hi!

Ok, ich habe jetzt folgende Lösung gefunden:

Gehen wir davon aus, dass wir ein Tabelle "Products" und eine "Categories" haben. Ein Produkt kann in einer Kategorie sein. Somit hat ein Product eine Navigationseigenschaft "Category".

Beim Erstellen eines Products muss ich nun zunächst die vorhandenen Kategorien zur Verfügung stellen:


public ActionResult Create()
        {
            ViewData["Categories"] = entities.CategoryMenge;
            return View();
        } 

In der CreateView kann ich jetzt die vorhandenen Kategorien anzeigen:


<p> 
               <label for="Category.CategoryID">Kategorie:</label>
               <%= Html.DropDownList("Category.CategoryID", new SelectList((IEnumerable)ViewData["Categories"], "CategoryID", "Name"))%>
            </p>

Beim submit muss nun folgendes geschehen:


[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create([Bind(Exclude = "ProductID")] Product productToCreate)
        {
            try
            {
		//Kategorie explizit nachlesen
                productToCreate.Category = entities.CategoryMenge.First(c => c.CategoryID == productToCreate.Category.CategoryID);
                entities.AddToProductMenge(productToCreate);
                entities.SaveChanges();
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

Die Kategorie wird von der Dropdownlist nur als einfacher int-Wert in das Id-Feld geschrieben. Die Navigationseigenschaft bekommt dadurch aber noch nicht die "echte" Kategorie zugewiesen. Daher wird sie zunächst noch mal neu eingelesen. Anschließend wird das Produkt hinzugefügt.

Beim Editieren eines Produktes läuft es nun so ab:


public ActionResult Edit(int id)
        {
	    //Produkt zur ID lesen
            Product product = entities.ProductMenge.First(p => p.ProductID == id);
            product.CategoryReference.Load();
            SelectList list = new SelectList(entities.CategoryMenge, "CategoryID", "Name", product.Category);
            ViewData["Categories"] = list;
            return View(product);
        }

Damit die beim Produkt eingetragene Kategorie auch als selektierter Wert in der DropDownList angezeigt wird, muss ich die SelectList händisch aufbauen und den selektierten Wert vorgeben. Außerdem muss sichergestellt werden, dass die Navigationseigenschaft "Category" von Product auch wirklich geladen wurde (Load()).

Die View sieht wie folgt aus:


<p> 
               <label for="Category.CategoryID">Kategorie:</label>
               <%= Html.DropDownList("Category.CategoryID", new SelectList((IEnumerable)ViewData["Categories"], "Value", "Text"))%>
            </p>

Und das eigentliche Editieren funktioniert so:


[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(Product productToEdit)
        {
            try
            {
                // TODO: Add update logic here
		//Product neu lesen, da das übergebene Produkt vom Kontext völlig abgekoppelt ist
                Product existingProd = entities.ProductMenge.First(p => p.ProductID == productToEdit.ProductID);
                existingProd.Name = productToEdit.Name;
                existingProd.Category = entities.CategoryMenge.First(c => c.CategoryID == productToEdit.Category.CategoryID);
                entities.ApplyPropertyChanges(existingProd.EntityKey.EntitySetName, existingProd);
                entities.SaveChanges();
                
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                return View();
            }
        }

Hier habe ich keine bessere Möglichkeit gefunden. Das beim HTTP-Post übergebene Produkt ist vom Entity Framework-Kontext völlig losgelöst (detached) - daher lese ich es noch einmal über die Id aus dem Kontext und setze alle in der View editierbaren Eigenschaften noch mal neu. Dann übernehme ich die Änderungen. Anders habe ich es nicht hinbekommen, aber so funktionierts.

Erscheint mir alles sehr aufwändig für den normalen Fall, dass ich Fremdschlüsselwerte an einem Objekt ändern will. Geht das nicht komfortabler? Hab ich was übersehen? Hat jemand Verebsserungsideen?

Viele Grüße

TopperDEL

11.11.2009 - 22:19 Uhr

Hallo Hulk,

danke für deine Antwort! Leider hilft mir das nicht weiter. Ich verwende das "normale" MVC. Aber die Problemstellung ist, wie ich finde, eine andere.

Vielleicht formuliere ich es mal anders. Wenn ich in einer Tabelle ein Fremdschlüssel einer anderen habe - wie kann ich dann in einer View die erlaubten Werte zur Auswahl bringen? Wie machen das denn alle? Wie kann ich etwa beim Anlegen eines Produkts die Kategorie aus den vorhandenen auslesen? Muss ich das alles selber machen, oder kann das ASP.Net MVC schon out-of-the-box?

Danke weiterhin für jeden Hinweis!

Viele Grüße

TopperDEL

10.11.2009 - 20:09 Uhr

Hallo zusammen!

Ich habe ein Problem mit dem Entity Framework und ASP.NET MVC. Ich habe eine einfach Tabelle "Termine" und eine Tabelle "Orte". "Termine" war zuerst da, ich habe die Views für Erzeugen, bearbeiten etc. erstellt. Dann habe ich die "Orte" hinzugefügt und in in der Termine-Tabelle den fremdschlüssel OrtID hinzugefügt, das EF-Model aktualisiert etc.
Das funktioniert.

Was ich aber nicht hinbekomme ist, wie ich auf der Create- und der Edit-View nun eine Dropdownbox anbinde, mit der ich beim Anlegen oder Bearbeiten eines Termins einen Ort verknüpfen kann. Ich kriege alle vorhandenen Orte angezeigt (mittels ViewData) - aber der gewählte Ort lässt sich nicht automatisch mit an den Termin binden.

Wie ist denn da das normale Vorgehen? Ich suche scheinbar unter den falschen Stichworten. Warum kann ich nicht einfach das von EF generierte Feld "Ort" bzw. "OrtReference" auf die ASP-Seite packen und das Framework kümmert sich um die Anzeige einer Dropdownlist incl. entsprechender Übernahme des gewählten Wertes.

Bin für jeden Hinweis dankbar!

Viele Grüße

TopperDEL

28.10.2009 - 14:57 Uhr

Hallo zusammen!

Ich habe einen Adorner in einem AdornerLayer liegen. Dieser bekommt zwei VisualChilds - eine RichTextBox und ein Panel, um das RTF zu bearbeiten. Wenn der Benutzer doppelt auf die RTF klickt, wird diese aktiviert und das Panel angezeigt. Dort kann der Benutzer dann den text fett machen, Schriftart ändern etc. Die üblichen Bearbeitungsfunktionen.

Nun wollte ich die Schaltfläche für "Fett" (Bold) per Command an die RTF binden, so dass diese automatisch darauf reagiert - das funktioniert aber nicht.

Ich habe es so probiert:
die RTF ist in einem Template abgelegt. Also hole ich mir diese per FindName aus dem Template und übergebe sie an das Panel. Das Panel hat eine DependancyProperty "RTF" an die ich das aus dem Template gelesen RTF binde. Dort habe ich einen ToggleButton angelegt, der Command="EditingCommands.ToggleBold" und CommandTarget="{Binding RTF}" gesetzt habe. Die Schaltfläche ist auch aktiv und kann gedrückt werden, es hat aber keine Auswirkungen auf die RTF. Lasse ich das CommandTarget weg, so bleibt die Schaltfläche deaktiviert.

Hat jemand eine Idee, wo es hier schief laufen könnte? Bin echt ratlos und für jeden Hinweis dankbar!

Viele Grüße

TopperDEL

23.10.2009 - 18:47 Uhr

Hallo talla,

danke für deine Antwort.
Fällt dir dann eine Möglichekit ein, wie ich der RichTextBox sagen kann, welchen Teil der Dokuments sie zur Bearbeitung anzeigen soll? Also sozusagen über die DocumentPageView eine RichTextBox legen. Hast du da eine Idee?
Denn meines wissens nach shcaffe ich es ja nur, das gesamte Dokument mit einer RichTextBox bearbeiten zu lassen.

Vielen Dank!

Viele Grüße

TopperDEL

23.10.2009 - 16:20 Uhr

Hallo!

Folgendes: ich möchte ein FlowDocument ähnlich wie in Word über mehrere Seiten verteilt anzeigen und bearbeiten können. Logischerweise will ich mich selber nicht darum kümmern, welcher Inhalt wo auf welcher Seite gerendert werden soll.

Wenn ich bereits ein fertiges Dokument habe (etwa ein RTF oder XPS-Dokument), dann kann ich das in einem FlowDocument einladen und mittels DocumentPageViews und dem DocumentPaginator eines FlowDocumentPageViewer die Seiten einzeln anzeigen. Die DocumentPageView kümmert sich dabei darum, den richtigen BEreich aus dem Dokument anzuzeigen.

Wie schaffe ich es aber nun, das Dokument in den einzelnen Seiten auch zu bearbeiten? Das ganze scheint ja nur für die Anzeige gedacht zu sein, richtig? Gibt es da irgendwo eine Eigenschaft oder eine andere Klasse, mit der ich Dokumente auch bearbeiten kann? Ich bräuchte quasi eine Art RichTextBox in einem DocumentPageView.

Irgendwelche Ideen dazu? Vielen Dank!

Viele Grüße

TopperDEL

04.10.2009 - 14:35 Uhr

Hi!

Ich habe nun selbst eine Lösung gefunden. Ich lasse mir im richtigen Moment die Bounds der Strokes-Collection geben und berechne daraus eine ScaleTransform, die die Größe dieser Bounding-Box mit der Größe des InkCanvas IC1 ins Verhältnis setzt. Diese wende ich dann auf IC1 an, wodurch die Tinte entsprechend meinen Wünschen gezoomt wird.

Der Thread ist damit geschlossen. Danke an alle, die zumindest mal über eine Lösung nachgedacht haben. 😉

Viele Grüße

TopperDEL

04.10.2009 - 12:11 Uhr

Hi!

Wieso legst du nicht einfach vier Thumbs an die entsprechenden Ränder? Ein Thumb ist ja nicht automatisch ein "Punkt" im Sinne einer Steuerlementecke. Due kannst den Thumb ja auch so hoch machen wie dein zu veränderndes Control und den Thumb jeweils links und rechts platzieren. Das selbe machst du oben und unten. Nun hast du vier Thumbs und weißt bei jedem, ob es für die Vergrößerung nach oben, links, unten oder rechts gedacht ist.

Verstehst du, was ich meine?

Viele Grüße

TopperDEL

04.10.2009 - 12:06 Uhr

Hallo zusammen!

Ich habe eine Fläche, die über eine LayoutTransform extrem verkleinert wird. Alle Elemente innerhalb dieser Fläche bekommen dadurch entsprechend große Größenwerte um weiterhin sichtbar zu sein. Ein normales Steuerelement ist dabei dann z.B. statt 50 Pixeln 500 Pixel breit.

Innerhalb dieser transformierten Fläche habe ich einen InkCanvas(IC1), der Tinte aus einem InkCanvas(IC2) anzeigt, der nicht so extrem ge-LayoutTransform-t wird. Nun soll in dem von der Transformation beeinflussten InkCanvas IC1 die Tinte angezeigt werden, die in IC2 eingegeben wurde. Durch die Transformation ist diese Tinte nun aber extrem klein.

Hat nun jemand eine Idee, wie ich die Tinte wieder richtig groß bekomme? Ich müsste sie also entweder um den LayoutTransform-Faktor vergrößern oder die LayoutTransform für den InkCanvas ignorieren. Fällt dazu jemandem was ein?

Danke schon mal!

Viele Grüße

TopperDEL

24.09.2009 - 13:54 Uhr

Danke für deine Antwort!

Das Problem bei IsHitTestVisible ist dann aber, dass der InkCanvas keine Tinte mehr entgegennimmt.

Noch eine andere Idee dazu?

23.09.2009 - 22:48 Uhr

Hallo zusammen!

Ich brauche mal eben eine Denkhilfe. Ich habe grob die folgende Struktur:


<Grid>
<StackPanel>
...
</StackPanel>
<InkCanvas/>
</Grid>

Das StackPanel bekommt per Databinding verschiedene Elemente zugewiesen. Diese werden wiederum über ein DataTemplate gestyled. Sie bestehen prinzipiell aus einem TextBlock und einem Button. So, nun das Problem. Der Button wird unterhalb des TextBlockx angezeigt - aber nur, wenn die Maus über dem TextBlock ist. Das funktioniert an sich. Liegt aber nun der oben angegebene InkCanvas über dem StackPanel, dann kommt logischerweise "die Maus nicht mehr an". Schließlich nimmt der InkCanvas alle Mausereignisse auf. Wenn ich den Hintergrung des InkCanvas Transparent mache, dann sehe ich zumindest was dahinter liegt. Aber wie kriege ich denn die im VisualTree darunter liegenden Elemente dazu wieder ein IsMouseOver auf true zu bekommen?

Ich hoffe, es wird klar, was ich habe und wo das Problem liegt. Fällt jemandem dazu was ein?

Viele Grüße und Danke!

TopperDEL

22.06.2009 - 15:35 Uhr

Hallo HPV!

Entschuldige bitte meine sehr späte Antwort! Die von dir verlinkte Artikelserie ist sehr interessant und bietet vor allen Dingen einige der von mir genannten Punkte. Aber es fehlen auch noch einige andere. Aber vielleicht sind meine Wünsche auch einfach zu speziell.

Trotzdem vielen Dank für deine Hilfe!

Viele Grüße

TopperDEL

04.06.2009 - 20:23 Uhr

Hallo!

Ich bin schon ziemlich lange auf der Suche und habe auch schon einiges selbst implementiert, stoße aber immer wieder an Grenzen. Ich möchte eigentlich nichts weiter als Elemente (UIElemente in der WPF) auf einer Oberfläche zur Laufzeit zu platzieren. Es soll, wie aus eigentlich jedem guten Programm bekannt, möglich sein Elemente zu positionieren und in ihrer Größe zu verändern.

An sich geht das ja mit Adornern in der WPF ganu gut. Aber hier geht es um die ganzen Details. Z.B. dabei einen Undo-Stack zu unterstützen. Oder per Auswahlrechteck auch mehrere Elemente auf einmal markieren und bearbeiten zu können. Oder dem Benutzer Hilfsmittel wie die aus dem Visual Studio-Designer bekannten Snaplines anzubieten.

Komischerweise gibt es für diesen - aus meiner Sicht doch sehr häufig benötigten Anwendungsfall - noch kein Framework. Zumindest ist mir keines bekannt. Und mit meinen beschränkten Resourcen hinsichtlich Zeit und Erfahrung komme ich nicht weiter. Ja, ich kann Elemente einzeln verschieben und vergrößern - aber auch nicht mehr.

Kann mir irgendjemand helfen ein entsprechendes "FrameWork" aufzubauen oder erklären, wie ich all die folgenden Dinge sinnvoll strukturiert unter einen Hut bekomme:

  • Einfach- und Mehrfachselektion (Auswahlrechteck)
  • Positions- und Größenänderung
  • Undo/Redo-Unterstützung
  • Snaplines

Ich stelle mir eine Klasse vor, die Elemente mit einem bestimmten Interface auf ihrer Oberfläche mit den oben genannten Dingen verwaltet.

Kann mir jemand helfen? Vielen Dank!

Viele Grüße

TopperDEL

07.05.2009 - 19:57 Uhr

Danke schon mal für den Hinweis! Das wäre zumindest eine Möglichkeit.

Gibt es dann einen guten weg um festzustellen bzw. zu warten bis SQL-Express soweit ist? Kann ich das initialisieren irgendwie erzwingen?

07.05.2009 - 17:23 Uhr

verwendetes Datenbanksystem: SQL Server 2008 Express/Entity Framework

Hallo zusammen!

Ich habe mit dem neuen Entity Framework eine Zugriffsschicht auf einen SQL Server 2008 express-Datenbank umgesetzt. Funktioniert an sich bestens.

Beim Start meiner Anwendung habe ich eine Routine geschrieben, mit der bestimmte Bedingungen getestet werden - unter anderem, ob die Datenbank zugreifbar ist. Dazu versuche ich einfach über das Entity Framework einen Count auf eine Tabelle. Und hierbei bekomme ich sehr oft (aber nicht immer!) den Fehler "Fehler beim zugrunde liegenden Anbieter auf Open" bzw. einen Timeout. Siehe Fehler hier:

"System.Data.EntityException: Fehler beim zugrunde liegenden Anbieter auf Open. ---> System.Data.SqlClient.SqlException: Timeout ist abgelaufen. Das Zeitlimit wurde vor dem Beenden des Vorgangs überschritten oder der Server reagiert nicht.
bei System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
bei System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
bei System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
bei System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
bei System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
bei System.Data.SqlClient.TdsParserStateObject.ReadByte()
bei System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
bei System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
bei System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
bei System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
bei System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
bei System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
bei System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
bei System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
bei System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
bei System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
bei System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
bei System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
bei System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
bei System.Data.SqlClient.SqlConnection.Open()
bei System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
bei System.Data.EntityClient.EntityConnection.Open()
bei System.Data.Objects.ObjectContext.EnsureConnection()
bei System.Data.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)
bei System.Data.Objects.ObjectQuery1.System.Collections.Generic.IEnumerable&lt;T&gt;.GetEnumerator() bei System.Linq.Enumerable.Single[TSource](IEnumerable1 source)
bei System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__2[TResult](IEnumerable1 sequence) bei System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable1 query, Expression queryRoot)
bei System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute~~(Expression expression)
bei System.Linq.Queryable.Count[TSource](IQueryable`1 source)"

Braucht der SQL-Server so lange um die Datenbankdateien zu öffnen? Ist das irgendwie ein Threading-Problem? Ich habe keine Ahnung, was ich gegen diesen Fehler tun kann.

Zur Anwendung: sie läuft unter .Net 3.5 SP1. Ich habe ein Startfenster, das in seinem Window.Initialized-Event die Prüfungen durchführt. Kann es sein, dass das irgendwie zu früh ist, weil noch irgendwelche anderen Initialisierungen bei der Datenbank passieren?

Würde mich über Hinweise und Tipps sehr freuen! Danke schon mal!

Viele Grüße

TopperDEL

27.04.2009 - 12:28 Uhr

verwendetes Datenbanksystem: SQL Server 2008 Express

Hallo zusammen!

Ich habe ein paar grundlegende Fragen zum Entity Framework, die ich in den ganzen Tutorials und Blogs im Internet nicht richtig beantwortet finde. Ich möchte in meinem Programm drei Datenbanken anbinden. Diese sollen über das Entity Framework gekapselt werden.
Zu den Fragen:

  1. Ich erstelle die Datenbank am besten mit dem Management Studio. Die erzeugte MDF-Datei hänge ich in mein Projekt. Dort wird sie automatisch mit in das Ausgabeverzeichnis kopiert und ich kann sie später einfach in den Installer einbinden - richtig? Brauche ich das beim Einbinden von VS erzeugte DataSet, wenn ich mit dem Entity Framework arbeite? Eigentlich nicht, oder?
  2. Das Entity Framework kann ich aus der DB generieren. Ab sofort steht mir ein Namensraum zur Verfügung und ein Entity-Objekt mit Zugriff auf die Datenbank. Sollte ich das noch mal in einer eigenen DB-Zugriffsklasse kapseln? Oder rufe ich wirklich Entity.AddToTableName() direkt aus den verschiedenen Objekten meiner Anwendung aus auf? Was wäre eine gute Herangehensweise?

Danke schon mal für Hinweise und Tipps!

Viele Grüße

TopperDEL

18.04.2009 - 09:28 Uhr

Hi!

Ja, ich benutze den VS-Designer. Und ich habe mein Problem soeben gelöst. Vielleicht muss man nur mal eine Nacht drüber schlafen. 😉

Ich habe aber nochmal geguckt: im Code finde ich nichts. Es wird ja auch kein SQL-Code generiert. Ich verwende den Datenbank-Explorer von VS. Eine direkt ins Projekt eingehängte Lokale Datenbank der Compact-Edition (Endung sdf) kann ich dort mit einem Doppelklick bearbeiten. Dort kann ich Tabellen erstellen und Datentypen angeben. Bei VARBINARY und NTEXT gibt es allerding die Beschränkung der Länge auf 8000 bzw. 4000. Alternativ gibt es den Datentyp Image. Mehr kann ich da nicht machen - ich komm ja auch nicht an den SQL-Code ran.

Ich verwende aber über der Datenbank eine LINQ-to-SQL-Klasse. Dort hatte ich für die Spalte mit dem Binärstrom den Datentyp byte[] eingestellt. Beim Eintragen hat er dann eine Exception geworfen und gesagt, dass er das auf 8000 beschneidet.

Und jetzt die Lösung: in den Eigenschaften einer Entitätseigenschaften gibt es den Schlüssel "Serverdatentyp". Da habe ich testweise einfach mal IMAGE eingetragen - und siehe da, es funktioniert. Also hat die LINQ-to-SQL-Klasse schon beschnitten. Muss man auch erstmal drauf kommen, zumal aus meiner Sicht die Exception vom SqlServerCE-Namespace aus geworfen wurde.

Wie auch immer - das Problem ist gelöst. Danke trotzdem für deine Hilfe, Khalid!

Viele Grüße

TopperDEL

18.04.2009 - 00:39 Uhr

verwendetes Datenbanksystem: SQL Server 2005 Compact Edition

Hallo!

Ich will einen Binätstrom (byte[]) in meiner Datenbank ablegen (SQL server 2005 Compact Edition) und bekomme dabei aber den gleichen Fehler wie in folgendem Eintrag:
Mehr als 4000 Zeichen in SQL Compact speichern möglich?

Da geht es darum, dass NVARCHAR nur bis 8000 Bytes geht. Und selbst wenn ich IMAGE nehme, was laut Dokumentation 2GB fassen sollte, wird es bei 8000 Bytes abgeschnitten. Wie kriege ich denn dan größere Objekte in die Datenbank?

Hat irgendjemand das selbe Problem bzw. irgendeine Lösung? Ich such mich schon zu Tode...

Danke für jeden Hinweis!

Viele Grüße

TopperDEL

06.03.2009 - 15:03 Uhr

Welches MeasureString meinst du? Gibt es das noch in der WPF?

06.03.2009 - 14:45 Uhr

Kanns du mir da ein Beispiel geben?

Aber eigentlich ist die WPF doch Device-Independant. Und mir gehts ja nicht darum auf dem Monitor eine Original-Schriftgröße zu haben - sondern ich möchte relativ zu meiner eigenen Din-A4-Seitengröße eine 12-Punkt Schrift haben.

Weitere Hinweise oder Ideen?

06.03.2009 - 14:35 Uhr

Hallo zusammen!

Ich bräuchte ein bisschen Hilfe bei der Umrechnung von WPF-Pixeln und Schriftgrößen.

Folgendes: ich habe bei mir ein Canvas, das als Seite dient. Wenn es eine DinA4-Seite sein soll, ist diese 2100*2970 WPF-Pixel groß. Ich rechne intern also mit 10tel-Millimetern. 1cm=10mm=100 WPF-Pixel.

In diesem Koordinatensystem möchte ich jetzt die normale Windows-Schriften so skalieren, dass eine 12-Punkt-Schrift auch wieder 12 Punkt im internen Koordinatensystem sind.

Welchen Faktor muss ich hernehmen, damit das passt? Die schriftgröße ist ja von vielen Dingen abhängig - welche Masseinheit (Didot-Punkt und andere), die eingestellten DPI des Monitors etc.

Ich blicke da grad nicht mehr durch. Kann mir da jemand helfen? Vielen Dank!

Viele Grüße

TopperDEL

03.03.2009 - 13:59 Uhr

Hallo!

Ich habe eine Anwendung, in der UIElemente auf einem Canvas positioniert werden können. Ich habe es so implementiert, dass die Elemente ganz normal auf dem Canvas liegen. Klickt man nun mit der Maus ein Element an, so werden über das PreviewMouseDown-Event verschiedene Adorner angelegt. Unter anderem einer für das Vergörßern des Elements und einer für das Verschieben des Elements.

Funktioniert soweit prima. Allerdings würde ich das Element gleich beim selektieren an den Mauszeiger "heften" und sofort verschieben. Das Thumb-Control, das in dem MoveAdorner für die drag-Operation zuständig ist, reagiert aber erst, wenn ich nach dem selektieren die Maustste loslasse und nochmal auf das nun "selektierte" Element klicke.

Fällt jemandem ein, wie ich den Mausklick der für das selektieren "gedacht" war an den MoveThumb weiterreichen kann, so dass dieser sich sofort "angesprochen fühlt"? Ich dreh mich ein wenig im Kreis.

Danke für jeden Hinweise!

Viele Grüße

TopperDEL

22.02.2009 - 11:47 Uhr

Hi!

Hat jemand eine Idee, wie ich ohne Eingreifen des Benutzers aus einer XPS-Datei eine PDF-Datei generieren kann?

Danke schon mal!

Viele Grüße

TopperDEL

21.02.2009 - 12:13 Uhr

Hallo zusammen!

Ich habe eine Frage zum Druck unter der WPF. Ich lese mich schon seit drei Tagen durch diverse Beiträge, MSDN-Dokus und Blogs - komme aber irgendwie nicht weiter. Angeblich soll das Drucken mit der WPF doch leichter sein als vorher...

Folgendes: ich habe in meiner Anwendung ein eigenes Koordinatensystem. 1mm entspricht 10 WPF-Pixel. Eine Din-A4-Seite ist demnach 2100 * 2970 Pixel groß. Die Seite ist ein Canvas und kann vom Benutzer mit den üblichen Elementen befüllt werden. Und diese Seiten will ich jetzt ausdrucken.

Ich habe es geschafft aus der Liste der Seiten ein XPS-Dokument zu erzeugen; was auch schon schwierig genug war, da es noch irgendwie Probleme mit der VisualsToXpsDocument-Klasse gibt. Da wird immer nur die erste Seite mit Inhalt gefüllt. Also bin ich nun her gegangen und fülle meine eigenen Seiten über eine FixedPage in einen PageContent und füge das einem FixedDocument hinzu. Die erzeugte XPS ist perfekt, lässt sich öffnen und auch drucken. Hierbei wird mein eigenes Koordinatensystem entsprechend angepasst, so dass eine PDF-DinA4-Seite komplett mit meiner Seite gefüllt ist.

Nun will ich aber nicht erst eine XPS-Datei erzeugen, die dann im DocumentViewer öffnen und manuell auf einen Drucker meiner Wahl drucken, sondern ich möchte über den PrintDialog das FixedDocument ausgeben. Das geht auch mit der Funktion PrintDialog.PrintDocument(fixedDoc.DocumentPaginator,"mein Doc"). Allerdings skaliert er an der Stelle den Seiteninhalt nicht mehr. Er knallt also meine 21002970 Pixel auf die Standard-DinA4-Seite (die irgendwas um die 7931100 groß ist). Man sieht also auf der ausgedruckten Seite nur einen kleinen BEreich links oben.

So, und hier liegt nun mein Problem. Wie kriege ich den Inhalt der FixedPage in einem FixedDocument auf die Größe der beim Druck angewählten Seite? Irgendwas vergesse ich doch, oder? Ich dreh mich im Kreis....

Ich bin für jeden Hinweis dankbar!

Viele Grüße

TopperDEL

21.02.2009 - 11:06 Uhr

Hi!

Für das Ablegen der Elemente bietet sich das StackPanel an. In diesem werden die eingefügten Objecte entweder Horizontal oder Vertikal (Je nach Orientation-Property) nebeneinander bzw. untereinander abgelegt. Im Handler für den Button zum Hinzufügen von Elementen musst du dann das einzufügende Element erzeugen und der Children-Collection des StackPanels hinzufügen. Wenn du das StackPanel wiederum in ein StackPanel steckst, dann kannst du das ganze so aufbauen, das sich der Einfüge-Button mit verschiebt.

Beispiel:

<StackPanel Name="BaseStackPanel"> 
     <StackPanel Name="ContentStackPanel"/>
     <Button Name="InsertButton"/>
</StackPanel>

Das "ContentStackPanel" ist dabei das StackPanel, das deine Elemente aufnehmen soll. Welche Elemente das sind bleibt dir überlassen. Wenn du ein ähnliches Element suchst wie das Panel in Windows.Forms oder wie eine Windows-Form selbst, dann empfehle ich dir das Canvas-Element. In diesem kannst du wie in Windows-Forms Objekte Pixelgenau (per Canvas.Left und Canvas.Top) "wie gewohnt" platzieren.

Viele Grüße

TopperDEL

14.01.2009 - 22:59 Uhr

Vielen Dank für den Tipp! Leider hilft mir das in meiner Situation nicht weiter. Ich denke, ich werde die Schließen Animation aus dem XAML rausnehmen und zusammen mit dem Timer für das Schließen meiner PopUps im Code erledigen. Mal sehen, ob das klappt.

Trotzdem danke!

Viele Grüße

TopperDEL

13.01.2009 - 21:20 Uhr

Hallo zusammen!

Ich steh irgendwie auf dem Schlauch. Vielleicht kann mir da jemand helfen.

Folgendes: Ich habe ein UserControl - ich nenne es mal MainControl. Dieses erzeugt ein Popup, in das es ein Control setzt und ihm ein Template aus seinem eigenen ResourceDictionary zuweist. So weit, so gut. Dieses ControlTemplate hat nun einen ControlTemplate-Trigger, der eine Schließen-Animation startet, so bald sich der Mauszeiger nicht mehr in dem Popup befindet. Funktioniert auch soweit.
Jetzt habe ich aber eine Funktion in dem Popup, das ein zweites Popup öffnet. Das zweite Popup wird über ein Event des ersten Popups ebenfalls im MainControl erzeugt. Jetzt soll das erste Popup aber so lange offen bleiben (Also die Schließen-Animation nicht ausführen), bis das zweite wieder geschlossen wird und sich der Mauszeiger nicht evtl. wieder zurück ins erste Popup bewegt hat.
Aber genau hier liegt der Knackpunkt. Beim herausbewegen aus dem ersten Popup wird die Animation gestartet, die ansonsten ja richtig wäre, aber in diesem Fall nicht. Wenn ich nun im MainControl eine DependencyProperty erzeuge, die mir angibt ob das zweite Popup offen ist, dann könnte ich ja durch einen MultiTrigger die "Schließen-Animation" erst starten, wenn die Maus nicht mehr im ersten ist und das zweite Popup nicht mehr existiert. Das Problem hierbei: die doppelte Bedingung ist möglicherweise schon ganz zu Beginn "true" und wird deshalb sofort ausgeführt. Ich dreh mich im Kreis...

Alles was ich will ist: Popup1-Schließen-Animation erst, wenn die Maus außerhalb aber das zweite Popup nicht offen ist.

Kann mir jemand aus dem Gedankenknoten helfen? Danke schon mal sehr herzlich!

Viele Grüße

TopperDEL

09.12.2008 - 19:23 Uhr

Das funktioniert auch nicht, weil die Property "Template" beim Canvas nicht existiert.

Kann nicht mal jemand den obigen Code in ein eigens Projekt schmeißen und es ausprobieren? Oder soll ich meine Solution mal anhängen?

08.12.2008 - 21:47 Uhr

Das hat leider auch nichts gebracht. Im Designer der UserControls sehe ich nun einen gelben Hintergrund, im Window sehe ich weiterhin nichts.

Kann es evtl. am TargetType des Styles liegen? Mein UserControl ist ja eigentlich vom typ "iTextBox". Ich muss dort aber "{x:Type UserControl}" angeben, ansonsten compiliert er nicht?