Laden...
Avatar #avatar-3124.jpg
Schlopp myCSharp.de - Member
Diplom-Informatiker / IT-Berater Stuttgart, München, Schweiz Dabei seit 16.05.2008 297 Beiträge
Benutzerbeschreibung
Über mich: - Diplom-Informatiker Studienrichtung Softwaretechnik - Microsoft Student Partner Uni Stuttgart - MCTS .Net Framework 2.0, Windows Applications - MCTS .Net Framework 3.5, Windows Presentation Foundation Applications

Forenbeiträge von Schlopp Ingesamt 297 Beiträge

22.07.2010 - 06:36 Uhr

Versuch das Ganze mal mit INotifyPropertyChanged und/oder ObservableCollections.

18.07.2010 - 19:16 Uhr

Ich meine mich daran erinnern zu können, das man Graphen recht gut mit verketteten Listen im Speicher darstellen kann, also sollte es ja auch beim Speichern in einer Datei funktionieren:

Dazu zunächst einfach mal alle Knoten miteinander verknüpfen:

A - B - C - D - E - F - G

anschließend zu jedem Knoten speichern, welcher andere Knoten von diesem erreicht werden kann:

A - B
|
B - C - D - E
|
C - E
|
D - E
|
E - F
|
F
|
G - D

Kann man auch recht einfach mit XML oder soetwas umsetzen.

17.07.2010 - 02:16 Uhr

Ansonsten kannst du das ganze recht einfach mit 3 Scrollviewern erreichen. Einer für den Content, einer links davon für die Zeilennummern, einer oberhalb für die Spaltennummern (beide jeweils ohne sichtbare Scrollbalken). Das Ganze dann mittels Attached-Properties und DataBinding so verknüpfen, dass die Scrollviewer auch gleichzeitig scrollen und schon ist es fertig 😁

15.07.2010 - 09:41 Uhr

Margins rücken nicht automatisch von allen Seiten ein, du kannst jede Seite einzeln setzen: Margin="0,5,10,-5" usw...

14.07.2010 - 09:41 Uhr

Liegt das Canvas eventuell über den Objekten?

14.07.2010 - 09:12 Uhr

Wenn der Background, z.B. vom Canvas, auf null gesetzt ist, werden keine Events wie MouseEnter, MouseMove, etc. ausgelöst. Wenn du das willst, setz den Background einfach auf Transparent.

14.07.2010 - 09:10 Uhr

Das sollte sich auch durch einen Aufruf von CaptureMouse() auf dem zu verschiebenden Element beim MouseDown und ReleaseMouseCapture() beim MouseUp umgehen lassen.

09.07.2010 - 12:21 Uhr

Hi,

ich habe gestern vom WPF-Toolkit-Calendar auf den 4.0-Calendar umgestellt. Dabei kam es dann zu einem Problem, weil der Verweis auf den VisualStateManager etc. nicht korrekt aufgelöst werden konnte. Eventuell muss man dies dann anpassen.
Auch können sich einige Properties oder Typen geändert haben, so gibts es beispielsweise das GridRowHeaderBorder-Element aus dem Toolkit in der Version des Frameworks nicht mehr.
Prinzipiell ist der Umstieg aber recht einfach zu erledigen, aber man muss im Zweifelsfall ein paar Sachen anpassen.

Schöne Grüße

06.07.2010 - 16:30 Uhr

Ich hatte mit Vista das gleiche Problem, dabei hat es geholfen unter den Diensten den "Microsoft Transient Multi-Monitor Manager" zu deaktivieren. Dabei sind mir keine Fehler aufgefallen, aber das ewige Einstellen nach dem Starten oder Einloggen war weg 😃
Hoffentlich klappt es bei dir auch.

23.06.2010 - 10:57 Uhr

Hier ist etwas, dass recht nah rankommt. Ist zwar in Silverlight, sollte laut John Gossman auch unter WPF genau so gehen.

23.06.2010 - 08:56 Uhr

Der mit dem AttachedProperty ziemlich sicher, da du weiterhin nicht vom ViewModel auf die View zugreifst, sondern den Command einfach bindest und im Property nur die Execute-Methode aufrufst. Lediglich im AttachedProperty müsstest du dich auf das entsprechende Event registrieren, aber da das ja ebenfalls Teil des View ist, sollte es funktionieren.

23.06.2010 - 08:18 Uhr

Schau mal unter den Stichwörtern FlowDocument und FixedDocument nach. Die kannst du den entsprechenden Readern, die es bereits als fertige Control gibt, anzeigen und ggfs. auch den Druck-Dialog aufrufen.

22.06.2010 - 16:02 Uhr

Alternativ kannst du ein AttachedProperty bauen, an das du ein ICommand bindest. Innerhalb dessen rufst du beim KeyUp-Event die Execute-Methode des gebundenen Commands auf.

16.06.2010 - 14:15 Uhr

Ich habe momentan ein HTC-Gerät mit Windows Mobile 6.1 und bin damit eigentlich recht zufrieden, zumindest so lange ich es nicht neu starten muss, was eine halbe Ewigkeit dauert. Es ist sicher nicht der Weisheit letzter Schluss, aber zum Telefonieren etc. reicht es locker.
Mein nächstes wird vermutlich ein Gerät mit Windows Phone 7 Series, da ich das Metro-Design sehr gelungen finde und auch die bisherigen Vorstellungen recht ansprechend waren.

Das iPhone ist an mir bisher komplett vorbeigegangen, aus den Gründen, die hier schon mehrfach genannt wurde.

15.06.2010 - 06:46 Uhr

Ok, Herbivore hat natürlich Recht (wie eigentlich immer 😃) Ich nehme alles zurück und behaupte das Gegenteil !

14.06.2010 - 15:15 Uhr

Bei mir würden alle den Wert 0 haben, nicht 1.

Angenommen ich habe die Kantengewichtungen 1, 3, 8. Nach dem negieren habe ich -1, -3, -8, anschließend zu allen Werten den Betrag des kleinsten Wertes =(|-8| = 8) addieren --> 7, 5, 0.

Dadurch "dreht man die Längen um" und umgeht das Problem mit negativen Kanten, falls es da geben sollte (ist mir nur bekannt, wenn es negative und positive Kanten gibt zusammen).

14.06.2010 - 14:08 Uhr

Dijkstra sollte eigentlich mit negativen Werten funktionieren, solang alle negativ sind. Ansonsten einfach alle Werte negieren und + den Betrag des kleinsten Wertes, dann sind wieder alle positiv und es funktioniert wie gewünscht.

Wenn der Graph allerdings zyklisch sein kann, kommt man mit Dijkstra und dem längsten Weg allerdings nicht weit 😃

14.06.2010 - 11:28 Uhr

Er sucht aber nicht den kürzesten, sondern den längsten Pfad. Eine Pseudo-Code-Implementierung davon findet man z.B. bei Wikipedia: Longest path problem

14.06.2010 - 08:20 Uhr

Ich habe bisher kein Spiel verpasst, auch wenn die meisten eher enttäuschen waren. Aber es gibt einfach nichts besseres als abends mit Freunden zu grillen und dabei ein schönes Fußballspiel zu sehen, mit allem was dazugehört: Jubeln, Fluchen und noch viel mehr Fachsimpeln, einfach super 😃
Dass ich heule, wenn mein Favorit verliert oder sogar ausscheidet, kommt dabei allerdings nicht vor und auch bei den Autokorsos nach einem Sieg bin ich höchstens bei einem WM-Titel für Deutschland oder der Meisterschaft für den VfB dabei 😄

13.06.2010 - 18:01 Uhr

Kurz und knapp: Binding + IValueConverter.
Wobei das Blinken dabei durchaus problematisch werden könnte.

10.06.2010 - 11:24 Uhr

Mit dem Completed-Event meldet eine Animation, dass sie abgeschlossen ist.

10.06.2010 - 08:24 Uhr

Du könntest den Server alle x Sekunden fragen, ob sich was geändert hat (Polling) oder der Server sagt automatisch allen Clients, dass sich was geändert hat, z.B. über einen Duplex WCF Service (hier steht zum beispiel, wie das gehen könnte).

09.06.2010 - 14:33 Uhr
<DataTrigger Binding="{Binding Path=.}" Value="True"> 

Damit beziehst du dich direkt auf den DataContext selber und nicht auf ein Property darin.

09.06.2010 - 14:23 Uhr

Das Binding in einem DataTrigger bezieht sich immer auf den aktuellen DataContext. In deinem DataTrigger wird nun im DataContext das Property "SaveRequested" gesucht, um es zu behandeln. Da dein DataContext aber selber schon SaveRequested ist, findet er das Property nicht und kann daher nicht daran binden. Du wirst in deinem Output mit ziemlicher Sicherheit eine Meldung stehen haben, dass er das Property nicht finden kann und dass deshalb das Binding nicht funktioniert.
Die Lösung habe ich eben schon gesagt, entweder du machst

this.DataContext = this;

oder änderst das Binding im DataTrigger so ab, wie ich es oben beschrieben habe.

09.06.2010 - 14:06 Uhr

Du musst entweder den DataContext auf das Objekt setzen, dass SaveRequested als Property hat, oder im Trigger den Path auf Path=. setzen.

09.06.2010 - 14:00 Uhr

Hat der Button auch den richtigen DataContext? Ansonsten versuch es einfach mal, indem du die UpdateSourceTrigger-Einstellung weglässt.

03.06.2010 - 09:13 Uhr

Du kannst dir ein Behavior schreiben, welches bei MouseEnter und MouseLeave entsprechend die Sachen setzt.
Ansonsten müsste es auch über EventTrigger gehn, die bei MouseEnter und MouseLeave die Properties setzen.

02.06.2010 - 12:03 Uhr

Ich vermute, dass du den Wert irgendwo überschreibst, weil es im oberen Fall ja scheinbar so funktioniert, wie es sein soll.
Aber wie JAck30lena sagt können wir das ohne lauffähiges Beispiel nicht nachvollziehen.

02.06.2010 - 09:39 Uhr

Dan Wahlin hat auf seinem Blog beschrieben, wie sowas funktioniert. Eventuell hilft es dir ja weiter: Link

01.06.2010 - 18:06 Uhr

TripleX hat recht, ist prinzipiell äquivalent 😃 Hatte mich übrigens vertan, es war ein ItemsControl, kein ContentControl. So ungefähr, aber ohne Garantie, dass es auch wirklich funktioniert, da ich es hier im Editor gebaut hab:

<Grid>
    <ItemsControl ItemsSource={TemplateBinding Gridlines}/>
    <ItemsControl ItemsSource={TemplateBinding Children}/>
</Grid>

Das erste ItemsControl bekommt die Gridlines als ItemsSource, also im Prinzip als Child-Elements, das zweite dann die Kurven oder was auch immer du darüber zeichnen möchtest. Das Ganze kannst du dann noch anpassen, je nachdem auf welchem Panel die ItemsControls basieren.

01.06.2010 - 16:46 Uhr

Nein, OnRender bringt dir nichts in WPF. Vielmehr solltest du entweder im DataContext den Pfad zu Logo, falls es sich um eine Bilddatei handelt, ablegen und den Style des Menus anpassen. Falls es sich um ein festes Logo handelt, kannst du das auch fest in den Style einbauen.

01.06.2010 - 16:44 Uhr

Ich habe eine Collection von Lines, die ich dann an an ContentControl binde. Die Linien selber muss man im CodeBehind dann dementsprechend anpassen, wenns ich Parameter ändern.

01.06.2010 - 16:42 Uhr

Oh ja, natürlich. Muss sich heute Morgen um eine geistige Umnachtung gehandelt haben bei mir. So sollte es aussehn:

CommandParameter={Binding .}

Also ihne das RelativeSource-Zeug.

01.06.2010 - 16:41 Uhr

Ähm, ich denke nicht, dass es so geht, sondern so wie Axxus vorher geschrieben hat. Wichtig dabei ist, dass zum einen der Index nullbasiert ist, d.h. der gegebene Code würde das Control in die 4. Spalte in der 4. Zeile setzen. Zum anders ist es wichtig, dass das Grid auch dementsprechend viele Zeilen/Spalten enthält.

01.06.2010 - 11:14 Uhr

Ich würd einfach in Paint o.Ä. 7 neue Gifs erstellen und in den Ordner kopieren 😃

01.06.2010 - 08:28 Uhr

Ich habe neulich so etwas ähnliches gemacht und bin dabei wie folgt vorgegangen: Ich habe mir ein eigenes Control geschrieben, das im Hintergrund die Gitternetzlinien zeichnet, jeweils mit einstellbaren Eigenschaften wie x-Abstand, y-Abstand, verschieden dicke Linien, etc. insgesamt sind das etwa 100-150 Zeilen Code, also kein wirklich großer Aufwand.
Für die Kurven, die gezeichnet werden sollen, lege ich vor das Gitternetz einfach ein weiteres ItemsControl, das die Children anzeigt, beispielsweise innerhalb eines Canvas oder Grids.
Die x- und y-Achse habe ich separat erstellt und die Breite/Höhe der Einheiten über Binding mit dem Gitternetz verbunden.

Das Ganze dann noch mit Drag&Drop und sonstigen Späßen, und schon sind 1-2 Tage rum 😄

01.06.2010 - 08:22 Uhr

Hi manullino,

ich würde das Item, dessen Button gerade geklickt wurde, als CommandParameter mitgeben, also wenn du innerhalb des Templates den Command bindest in etwa so:

CommandParameter={Binding .,RelativeSource={RelativeSource Self}}

Da hast du dann das Item drin, welches du geklickt hast und kannst dann im Command damit machen, was du möchtest.

31.05.2010 - 18:30 Uhr

WebServices an sich unterstützen kein "Push-To-Client". Du kannst dir dazu mal diese Diskussion anschauen: klick.
Ansonsten kannst du nur in regelmäßigen Intervallen die Änderungen abfragen.

31.05.2010 - 13:51 Uhr

Du könntest auch einfach einenMultiConverter nehmen, den du an die zwei Properties bindest und einfach als einen Wert zurückgeben.

30.05.2010 - 21:32 Uhr

Ansonsten kannst du im Grid noch SetRow und SetColumn verwenden. Funktioniert äquivalent zu den Canvas-Funktionen.

29.05.2010 - 10:43 Uhr

Wenn du den Standard-Style der MenuItems anschaust, gibt es bei den MenuHeader- und SubMenuHeaderTemplates jeweils ein Popup mit ContentControl und ItemsPresenter, das die SubMenuItems darstellt. Das musst du entsprechend anpassen und dorthin verschieben, wo du es haben möchtest.

29.05.2010 - 08:38 Uhr

Ich nehme an, dass du den Style der MenuItems anpassen musst.

29.05.2010 - 08:37 Uhr

Hat mein Link oben nicht geholfen? Der macht eigentlich genau das was du möchtest... auch in Silverlight !

28.05.2010 - 20:19 Uhr

Mit einem eigenen VM für die ListBoxItems meinte ich, dass die dort gebundenen Objekte (in deinem Fall die DataService.Items) die Commands enthalten. Eventuell kannst du dir um die Items ja einen Wrapper schreiben, der ebenfalls die Commands anbietet. Bei Stackoverflow wird hier eigentlich genau das gemacht.

28.05.2010 - 19:52 Uhr

Hi,

zunächst wäre interessant zu wissen, welche Silverlight-Version du verwendest. Commanding gibt es in SL erst seit Version 4, ich nehme daher einfach mal an, dass du diese verwendest.
Da die RelativeSource-Eigenschaft des Bindings in SL4 nur Self und TemplatedParent unterstützt, fällt diese Möglichkeit auch weg.
Ich denke am einfachsten wäre es, die Commands in den ViewModels der ListBoxItems anzubieten und dort einfach

<Button Command={Binding MyCommand}/>

zu verwenden.
Falls die einzelnen ListBoxItems kein eigenes ViewModel haben, kannst du auch das VM der ListBox verwenden, und direkt die Commands ansprechen.

@CSL: In WPF würde das so gehen, aber soweit ich weiß wird AncestorType in SL nicht unterstützt, weder in Version 3, noch in Version 4.

28.05.2010 - 10:35 Uhr

Eisbrecher - Kein Wunder

27.05.2010 - 09:59 Uhr

Silverlight kann keine synchronen Aufrufe. Du kannst das ganze so machen, dass du den asynchronen Aufruf startest und während du darauf wartest ein Overlay über die Anwendung lädst mit einer Progressbar oder Waiting oder sonst etwas. Dadurch blockiert die Anwendung zwar nicht, aber der Benutzer kann trotzdem keine Eingaben machen.

Der Webservice-Proxy bietet in Silverlight für jede Methode des Webservice eine Methode BeginMethodenname und EndMethodennamen. Zusätzlich musst du auf das Completed-Event der entsprechenden Methoden achten. Wenn dies aufgerufen wird, ist der asynchrone Aufruf vorbei und du hast die Ergebnisse.


private void CallWS()
{
    proxy.GetNameCompleted += OnGetNameCompleted;
    proxy.BeginGetName();
}

private void OnGetNameCompleted(object sender, GetNameCompletedEventArgs e)
{
    MessageBox.Show(e.Result);
}

So in der Richtung. Wenn du jetzt noch beim Aufruf das oben genannte Overlay einblendest und beim Completed wieder ausblendest, ist es fertig.

26.05.2010 - 14:57 Uhr

Direkt mixen geht nicht, aber man kann es sich hintricksen:

<MultiTrigger>
    <MultiTrigger.Conditions >
        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="True"/>
        <Condition Binding="{Binding DropIsPossible}" Value="False"/>
    </MultiTrigger.Conditions>
</MultiTrigger>

Bin mir dabei nicht ganz sicher, aber eigentlich sollte es so funktionieren.

26.05.2010 - 11:49 Uhr

Du kannst dir auch mal den Microsoft Application Architecture Guide anschauen. Den gibt es sowohl als Buch oder in der MSDN als PDF zum Download.

26.05.2010 - 07:15 Uhr

Ein WPF-Window in SL öffnen? Ich denke nicht, dass so etwas geht, aber wozu sollte das überhaupt gut sein?
Wenn du das WPF-Window in einem (Web-?)Service öffnest, wirst es auch auf dem Server angezeigt und nicht auf dem Client, ich denke nicht, dass das dem entspricht, was du dir vorstellst.