Laden...

Ansichten Menu wie bei W7 von Dr. WPF > nützlich, ABER: Läuft nicht unter Framework. 4 >> GELÖST

Erstellt von redbullberlin01 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.373 Views
R
redbullberlin01 Themenstarter:in
13 Beiträge seit 2008
vor 13 Jahren
Ansichten Menu wie bei W7 von Dr. WPF > nützlich, ABER: Läuft nicht unter Framework. 4 >> GELÖST

Hallo,

ich kann jedem das ItemsControl: "VistaViewsMenuSample" von Dr. WPF empfehlen. Es ist sehr nützlich für eigene Anwendungen.
Der Code ist für das Framework 3.5 und VS2008 geschrieben und lässt sich fehlerfrei auf VS2010 übertragen, wenn man das Framework 3.5 beibehält. Doch leider gibt es Probleme wenn die Anwendung auf Framework 4 umgestellt wird.

++Das es sich um ein ausgesprochen nützliches Control handelt, würde es sich lohnen die Fehler, welche das Control im Framework 4 erzeugt, zu beheben.
++Wie muss der Code für dieses Control für Frw.4 aussehen, bzw geändert werden ?? Oder, hat schon jemand das Control für Frw. 4 fit gemacht ?

Beim Zielframework wechsel von 3.5 auf 4 des Controls wird im Window1.xaml Fenster folgendes ausgegeben:
"Das Object des Typs "System.Windows.FrameworkElement[] kann nicht in den Typ "System.Windows.Markup.MarkupExtension" umgewandelt werden."

Auf dieser Seite findest Du den Artikel zum ViewMenu von Dr. WPF:http://drwpf.com/blog/2008/03/28/itemscontrol-r-is-for-rob-has-a-customer/
VistaViewsMenuSample Download: http://drwpf.com/blog/Portals/0/Samples/VistaViewsMenuSample.zip

VistaViewControl

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo redbullberlin01,

das ist wirklich sehr seltsam. Ich kann mir nicht erklären, warum es auf .NET 3.5 läuft, aber nicht auf .NET 4. Am einfachsten wäre es, wenn du das Control in eine separate Assembly packst und diese dann in deinem Projekt referenzierst. Getestet habe ich es nicht, aber es sollte eigentlich klappen. Dein Projekt wird dann auf .NET 4 laufen.

Frag doch mal direkt den Doktor. Er wird die bestimmt eine Antwort drauf geben können.

So wie ich das sehe, ist dort ein fehlerhaftes Binding. Auf .NET 3.5 läuft es. Dann muss wurden wahrscheinlich die Regeln fürs Binding auf .NET 4 "verschärft". Versuch mal den Fehler zu lokalisieren und den zu beheben. Das wäre das einfachste. Verwende am besten Tools wie Mole oder WPF Inspector.

Falls hier keiner im Forum eine Antwort weiß, kannst du auch direkt bei connect.microsoft.com nachfragen. Die werden dir bestimmt eine Antwort oder eine Begründung nenen können.

zero_x

Nachtrag: 1000. Beitrag! 😄

R
redbullberlin01 Themenstarter:in
13 Beiträge seit 2008
vor 13 Jahren

Hallo zero_x,

ich nutze dieses Control in einer Programm. Dort ist es auf mehrere Assemblies verteilt. Eine für die ListenElemente, eine andere für die Editierung der Listeneinträge, eine weitere für die Definition des VistaViewControl Buttons im geschlossen Zustand ...

Diese dll Komponenten werden referenziert vom eigentlichen Programm (tracks), weiter unten ist eine Abbildung zu sehen.

Wenn nun Komponennten des Problem-Contols im Framework 3.5 definiert sind und das Programm im Framework 4. Wie Du es in Deinem ersten Absatz vorschlägst, dann läuft leider nicht alles einwandfrei. Denn der Schieberegler des Controls lässt sich dann erstaunlicherweise nur noch wie in der Abbildung zu sehen bis zur Hälfte nach unten schieben. Und trotzdem ändert sich die Darstellung, hier scheint die Lage des Mauszeigers (den Mauszeiger habe ich nachträglich eingezeichnet) und nicht die lage des Schiebereglers die entscheidende Größe zu sein.

Den Doktor habe ich auch angefragt, bin schon gespannt was ich von ihm zu hören bekomme.

Nach der Umwandlung bekomme ich im Windows1.xaml Fenster folgende Meldung:
"Das Object des Typs "System.Windows.FrameworkElement[] kann nicht in den Typ "System.Windows.Markup.MarkupExtension" umgewandelt werden." Soweit kann ich schon mal den Fehler konkretisieren.

Vielen Dank für die Software bzw. den Forum Tip. Sollte sich in diesem Forum keine Lösung abzeichnen, werde ich als nächstes bei Microsoft nachfragen, und wenn ich von denen nichts hören sollte, werde ich es mit Deinen Software empfehlungen versuchen.

Redbullberlin

J
641 Beiträge seit 2007
vor 13 Jahren
So...

Das Problem ist das er das in der genric.xaml definirte Array mit den Menüitems nicht in ein Markupextension Objekt umwandeln kann. Die frage ist nur, warum will WPF das überhaupt tun?

cSharp Projekte : https://github.com/jogibear9988

J
641 Beiträge seit 2007
vor 13 Jahren

Habs hinbekommen.

Wenn du in der generic.xaml


 <x:Array x:Key="MenuItems" Type="FrameworkElement">

durch


 <x:Array x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type src:ViewsContextMenu}, ResourceId=MenuItems}" Type="FrameworkElement">

ersetzt und weiter unten:


<Setter Property="ItemsSource" Value="{StaticResource MenuItems}" />

durch:


<Setter Property="ItemsSource" Value="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type src:ViewsContextMenu}, ResourceId=MenuItems}}" />

dann läufts wieder...

Mfg.

cSharp Projekte : https://github.com/jogibear9988

J
641 Beiträge seit 2007
vor 13 Jahren

So nun gilts noch das problem mit dem ScrollRegler zu lösen (das er nur bis zu mitte geht!)

Einfach in ViewsContextMenu.cs


private static object CoerceScaleValue(DependencyObject d, object v)
        {
            double value = (double)v;
            double effectiveValue = (value > 10.0d) ? 10.0d : ((value < 1.0d) ? 1.0d : value);
            (d as ViewsContextMenu).UpdateCurrentViewForScale(value);
            return effectiveValue;            
        }

durch


private static object CoerceScaleValue(DependencyObject d, object v)
        {
            double value = (double)v;
            //double effectiveValue = (value > 10.0d) ? 10.0d : ((value < 1.0d) ? 1.0d : value);
            (d as ViewsContextMenu).UpdateCurrentViewForScale(value);
            return value;            
        }

ersetzen.

cSharp Projekte : https://github.com/jogibear9988

R
redbullberlin01 Themenstarter:in
13 Beiträge seit 2008
vor 13 Jahren

PROBLEME GELÖST !!!

Heute morgen ist mir aufgefallen dass hier fleißig an der Problemlösung gearbeitet wurde.
Und ich kann jetzt bestätigen, dass die erwähnten Probleme der VistaViewsMenu bei der Umstellung auf Framework 4 behoben sind.

VIELEN DANK jogibear9988 !!

Meine Anwendung die sicherlich noch weitere Jahre an blut schweiß und tränen von mir abverlangt konnte nun vollständig auf Framework 4 übertragen werden.

Viele Gruesse nach Offenau,

redbullberlin

J
641 Beiträge seit 2007
vor 13 Jahren

Kein Problem.

Ich denke man sollte es aber trotzem als Bug an Microsoft melden, da wohl irgendwas mit der x:array MarkupErweiterung und der Verwendung dieser als StaticResource falsch läuft!

Noch ne Frage: Für deine Anwendung hast du da Teile von diesem Projekt (http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part4.aspx) als Grundlage genommen? Rein interessehalber?

cSharp Projekte : https://github.com/jogibear9988

R
redbullberlin01 Themenstarter:in
13 Beiträge seit 2008
vor 13 Jahren

Habe bereits vor ein paar Tagen das Problem an connect.microsoft.com weitergereicht. Nach aktuellem Stand wurde die Anfrage an ein spezialisiertes Team weitergeleitet.

Konnte Deinen link nicht aufrufen, denke aber dass es sich hier um den vierteiligen Beitrag DiagramDesigner bei Codeprojekt handelt. Und du liegst völlig richtig mit deiner Einschätzung. Dieser Beitrag, ich glaube er ist von einem Österreichischen MS Mitarbeiter, ist die Grundlage meiner Oberfläche.