WPF Browserapplication

Andy0709

Mitglied
hi

habe ein problem und zwar wie rufe ich von meiner hauptseite eine andere seite (eine andere xaml datei) auf?
also wie springe ich zb von meinem login window in mein hauptwindow?

(wenn ich ein objekt meines hauptwindows anlege und dass dann mit window.show() oder window.showdialog() oder window.activate() aufrufe bekomme ich immer eine SecurityException)
 
Zuletzt bearbeitet:
Du kannst das beispielsweise über ein Frame lösen. Hier ein einfaches Beispiel, welches jedoch nur zeigt wie man es lösen kann, jedoch die für ein Login benötigte Funktionalität nicht enthält.

Hier die HauptPage als XAML
Code:
<Page x:Class="WpfBrowserLoginCs.Page1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Page1">
    <Frame x:Name="ContentFrame"/>
</Page>

Dann gibt es eine LoginPage:
Code:
<Page x:Class="WpfBrowserLoginCs.LoginPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="LoginPage">
    <StackPanel Orientation="Vertical">
        <Label Content="Username"/>
        <TextBox />
        <Label Content="Password"/>
        <TextBox />
        <Button x:Name="LoginButton" Content="Login"/>
    </StackPanel>
</Page>
Und schlussendlich eine Page, die nach dem Login aufgerufen werden soll:
Code:
<Page x:Class="WpfBrowserLoginCs.LoggedInPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="LoggedInPage">
    <Grid>
        <Label Content="You are logged in successfully"/>
    </Grid>
</Page>

Die Codebehind-Datei der Hauptpage sieht wie folgt aus:
Code:
public partial class Page1 : Page
{
    private LoginPage _loginPage;

    public Page1()
    {
        InitializeComponent();
        Init();
    }

    private void Init()
    {
        _loginPage = new LoginPage();
        _loginPage.LoggedIn += new EventHandler(_loginPage_LoggedIn);
        ContentFrame.Navigate(_loginPage);
    }

    void _loginPage_LoggedIn(object sender, EventArgs e)
    {
        ContentFrame.Navigate("LoggedInPage.xaml");
    }
}

Die LoginPage sorgt lediglich dafür, dass ein Event weitergereicht wird:
Code:
public partial class LoginPage : Page
{
    public event EventHandler LoggedIn;

    public LoginPage()
    {
        InitializeComponent();

        LoginButton.Click += new RoutedEventHandler(LoginButton_Click);
    }

    void LoginButton_Click(object sender, RoutedEventArgs e)
    {
        if (LoggedIn != null)
            LoggedIn(this, new EventArgs());
    }
}

Dies wäre ein einfaches und schnelles Beispiel.
 
hab das gerade nachprogrammiert und muss sagen das ist nicht das richtige für mich.
gibt es noch alternativen?
generell um zwischen mehreren seiten zu wechseln.
 
gut ich beschreibe mal was man sieht wenn man was macht:

1) man betritt die seite und sieht eine login seite.
2) wenn man auf registrieren drueckt soll meine registrieren xaml kommen
3) wenn man auf login klickt soll eine xaml kommen wo man nun entweder auf die design tool xaml kommt oder in die shop xaml
4) ist man in der design tool xaml so kann man wenn man auf fertigstellen (das objekt wurde designt) klickt ein warenkorb fenster.
5) drueckt man dann auf senden so kommt man ins shop fenster (wo man vorher auch shcon hin gekonnt haette), wo das designte modell nun im shop warenkorb liegt.
6) man geht direkt in den shop und ist direkt auf der shop seite
7) man klickt auf bestellen wenn man im shop im warenkorb ist, die lieferung ist bestellt und ich erhalte eine email


was koennte ich dir noch erzaehlen?
hoffe das hilft schonmal.
 
Eine Frage, bevor ich auf deine Punkte eingehe:
Sollte das Teil für einen größeren Kundenkreis sein? Beipspielsweise Besuchern von deinem Shop? Wenn ja, dann ist die WPF Browseranwendung eventuell nicht ganz richtig für dich ...
 
ob daraus ein größerer kundenkreis wird, wird sich erst heraus stellen, es handelt sich hierbei um unsere diplomarbeit.
was denkst du waere dafuer besser geeignet und aus welchem grund?
 
Naja, für eine Diplomarbeit mag es eventuell in Ordnung gehen.

Aber: Bei einer WPF Browseranwendung, wird WPF as it is verwendet. D.h. es muss das .NET Framework 3.0/3.5 installiert sein damit es lauffähig ist. D.h. du verwendest zwar den Browser, bist aber nicht unabhängig. Daher würde sich eine normale WPF-Anwenudng fast besser eigenen.

Möchtest du auf mehreren Plattformen aktiv sein/werden, dann würde ich eher Silverlight empfehlen. Hier gibt es Implementierungen für Linux (Moonlight) etc. Eine WPF-Browseranwendung wird hingegen wohl noch lange Zeit nur auf Windows-Rechnern verfügbar sein.
 
das ganze soll online verfügbar sein, dachte das waere mit einer normalen browseranwendung nicht realisierbar.

du wirst es nicht glauben, aber wir sind von silverlight auf wpf umgestiegen weil sich die uns bekannte silverlight version noch bis ende sommer in der beta befindet und zu viele moeglichkeiten nicht gegeben sind.

über die compatibilitätsprobleme und ähnliches sind wir uns, soweit wir wissen, informiert.


thx fuer die tips!
 
Kommt drauf an, was du in den Shop alles hineinpacken möchtest. Aber vermutlich soll es in die Richtung gehen, dass man sich sein Produkt zusammenstellen, zoomen, drehen etc. kann. Dann ist es mit einer reinen Webanwendung eher wieder vorbei und WPF schon in Ordnung.

Allerdings gibt es bereits derartige Anwendungen auf Basis von Silverlight, ist damit also definitiv machbar. Wenn auch vielleicht nicht ganz so einfach und komfortabel als mit WPF.
 
Zurück