Autor Beitrag
Määx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 123



BeitragVerfasst: Di 29.07.14 11:42 
Hallo zusammen,

ich habe begonnen einzelne Komponenten meiner WinForms-Anwendung auf WPF umzustellen. Da meine Anwendung aus mehreren Fenstern besteht habe ich zunächst einzelne Fenster "neu" implementiert...
Jetzt habe ich jedoch das Problem, dass ich diese logischerweise nicht mehr wie früher mit window.Show() anzeigen kann. Deshalb meine Frage: wie kann ich nun meine MainWindow.xaml bzw App.xaml aufrufen und starten?
Für einzelne Elemente gibt es ja das HostElement - aber ich will jetzt nicht mein Window in ein Panel ändern und dann in einem WinForms-Window hosten lassen - ode rist das die einzige Möglichkeit?

Vielen Dank
Määx

Edit: bzw ich kann schon ein .Show auf die MainWindow.cs aufrufen, aber dann erhalte ich jede Menge Fehler bzgl StaticResources usw :(
Auch folgendes führt zu den gleichen Fehlern:
ausblenden C#-Quelltext
1:
2:
3:
var wpfwindow = new WPFWindow.MainWindow();
ElementHost.EnableModelessKeyboardInterop(wpfwindow);
wpfwindow.Show();



Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Di 29.07.2014 um 12:39
Määx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 123



BeitragVerfasst: Di 29.07.14 12:36 
mh ok es scheint etwas mit dem Laden der Resourcen zu tun zu haben!
@Moderator: Kann man diese Frage in das WPF-Forum verschieben?

Ich habe jetzt folgendes gefunden, was immer vor InitializeComponent() aufgerufen werden soll:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public static void EnsureApplicationResources()
{
    if (Application.Current == null)
    {
        // create the Application object
        new Application();

        // merge in your application resources
        Application.Current.Resources.MergedDictionaries.Add(
            Application.LoadComponent(
                new Uri("MyLibrary;component/Resources/MyResourceDictionary.xaml",
                UriKind.Relative)) as ResourceDictionary);
    }
}


Hat bei mir aber auch nicht geholfen... es kommt weiterhin der Fehler:
Zeilennummer "45" und Zeilenposition "66" von "Die Angabe eines Werts für "System.Windows.StaticResourceExtension" führte zu einer Ausnahme.".

Was kann man da noch machen? Bin am verzweifeln :(
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 29.07.14 13:19 
Hallo Määx,

macht es nicht mehr Sinn, die komplette Anwendung als WPF-Projekt neu aufzusetzen und dann einzelne WinForms-Fenster bzw. Elemente mittels des WindowsFormsHost-Controls daraus aufzurufen?
Määx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 123



BeitragVerfasst: Di 29.07.14 13:56 
Hey,

das Ziel ist es natürlich alles in WPF umzuwandeln. Leider ist mein Hauptfenster sehr komplex&umfangreich und soll eh in vielen Punkten neu gestaltet werden - bis das dann aber fertig ist dauert noch etwas. Ich hatte deshalb um mich in WPF noch weiter einzuarbeiten eben mit den ersten kleineneren weniger komplexen Fenstern angefangen.
Funktioniert der Aufruf von WinForms aus WPF den unkomplizierter? Gibt es die Möglichkeit ein komplettes Fenster einzubetten so dass ich wirklich nur ein neues WPF-Projekt erzeuge und hier direkt meine Hauptaplikation einbette?

Suche nach einer schnell umzusetzenden stabilen Übergangslösung bis ich Zeit habe auch meine Hauptanwendung neu zu strukturieren und in WPF umzusetzen... darf also auch eine nicht ganz so schöne Lösung sein ;)

Vielen Dank
Määx
Määx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 123



BeitragVerfasst: Di 29.07.14 14:10 
mhh, ich mache aber auch scheinbar grundlegend etwas falsch!
Habe jetzt mal deinen Vorschlag ausprobiert - die WinForm lässt sich ja tatsächlich super integrieren...
Aber rufe ich aus einem neuen WPF-Projekt meine andere WPF-Anwendung auf, erhalte ich genau den gleichen Fehler! Muss man die ResourceDictionarys immer in andere Projekte mit kopieren? Dachte man kann -wie bei winForms- einfach ein anderes Projekt als Verweis hinzufügen und dann nutzen...

Vielen Dank
Määx

Edit:
so ich habe das jetzt noch weiter analysiert und das Problem tritt nicht generell bei der Resourceeinbindung auf, sondern beim Einbinden eines Converters:
ausblenden C#-Quelltext
1:
Visibility="{Binding DisplayDetails, Converter={StaticResource BoolToVisibilityInvertedConverter}}"					

Eingebunden wird er in meinem dictionary
ausblenden C#-Quelltext
1:
2:
3:
4:
[...]
xmlns:converter="clr-namespace:ValueConverters;assembly=ValueConverters"
[...]
<converter:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />

Der converter ist in einem dritten Projekt (Klassenbibliothek) und sieht wie folgt aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public class BoolToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (bool)value ? Visibility.Visible : Visibility.Collapsed;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }


Hängt das damit vll irgendwie zusammen?
Määx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 123



BeitragVerfasst: Di 29.07.14 14:21 
sorr, dass ich hier jetzt alles voll spame :)
Ich habs rausgefunden: ich muss meine ValueConverter-Biliothek auch im Hauptprojekt einbinden.

Wird die xaml erst zur Laufzeit ausgewertet und deshalb ein Verweis benötigt?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 29.07.14 15:18 
Ja, die Erfahrung habe ich auch gemacht: Resource-Libraries müssen direkt referenziert werden und die Resources selbst noch per ResourceDictionary.MergedDictionaries eingebunden werden.
Scofield2011
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Windows XP, Windows 7, Windows 8
C#, VBA, VB
BeitragVerfasst: Mi 30.07.14 19:55 
Das hat jetzt zwar überhaupt nichts mit deiner Frage zu tun, aber mich würde es halt mal interessieren.

Ob man WinForms oder WPF verwendet ist ja Geschmackssache, aber warum machst du dir die Mühe für einen Umstieg?

Ich persönlich bin ja (bisher) kein WPF Fan, weil, meiner Meinung nach, WinForms Anwenderfreundlicher ist, wodurch man sich auf das Wesentliche konzentrieren kann. Auch wenn jetzt WPF neuer und vielleicht die Zukunft sein sollte, aber nicht alles was neu ist, muss auch gleich automatisch gut sein - siehe Windows 8.
Määx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 123



BeitragVerfasst: Mi 30.07.14 21:36 
ich habe mich mich dazu entschlossen, weil mir mir eine intuitive GUI sehr am herzen liegt und ich eh eine starke Neugestaltung im Sinn hatte. Bei WPF empfinde ich persönlich die Gestaltung individueller Oberflächen sehr viel einfacher, schneller und flexibler. Allein ein ListView in WinForms, dass pro Zeile individuelle Controls enthält empfand ich hier relativ aufwendig. In WPF kann ich dies mit wenigen Zeilen Code realisieren. Oder ein DropDown mit verschiedenen Hintergrundfarben...

Es gibt vielleich auch entsprechende Möglichkeiten in WinForms die ich nicht entdeckt habe - aber bei WPF empfinde ich die Gestaltung neuer Elemente absolut genial :) Ist sicherlich geschmacksache - da ich aber eh vieles Neu mache habe ich mich nun für einen Umstieg auf WPF entschieden und es bisher auch noch nicht bereut ;)

Viele Grüße
Määx