Benutzer mit den meisten Antworten
Click event von Page aus

Frage
-
Hallo,
ich habe ein MainWindow die wie folgt aufgebaut ist.
<Grid> <DockPanel Name="MainPanel" Height="700" Width="1000" Background="#FFE2351A"> <StackPanel Name="MainMenuePanel" Height="700" Width="100" HorizontalAlignment="Left" Background="Gray"> <Button Name="exitbtn" Height="30" Width="90" Margin="0,10,0,0" Content="Beenden" Click="exitbtn_Click"/> <Button Name="test1" Height="30" Width="90" Margin="0,10,0,0" Content="Login" Visibility="Collapsed" /> <Button Name="test2" Height="30" Width="90" Margin="0,10,0,0" Content="Beenden" Visibility="Collapsed"/> <Button Name="test3" Height="30" Width="90" Margin="0,10,0,0" Content="Beenden" Visibility="Collapsed"/> <Button Name="test4" Height="30" Width="90" Margin="0,10,0,0" Content="Beenden" Visibility="Collapsed"/> <Button Name="test5" Height="30" Width="90" Margin="0,10,0,0" Content="Beenden" Visibility="Collapsed"/> <Button Name="test6" Height="30" Width="90" Margin="0,10,0,0" Content="Beenden" Visibility="Collapsed"/> </StackPanel> <Frame x:Name="MainFrame" Height="700" Width="880" NavigationUIVisibility="Hidden" VerticalAlignment="Top" HorizontalAlignment="Left"> </Frame> </DockPanel> </Grid>
nun möchte ich gerne von der jeweiligen geladenen Page im Frame auf die Buttons im MainWindow zugreifen.
Wie mache ich das am besten ??
gruesse
Cay
Antworten
-
Hallo Cay,
hier würde ich wohl so vorgehen, dass jede Page mit mehreren Eigenschaften oder einem Array (o.ä.) nach außen hin zeigt welche Buttons sie braucht. Wenn du nun zu einer neuen Seite navigierst, dann geschieht das ja innerhalb des Windows wo du auch zugriff auf die Buttons hast. Dort kannst du dann die Eigenschaft auslesen und die Buttons entsprechend wegblenden.
Wenn du nach der Navigation die Button-Status verändern willst, so würde ich innerhalb der Pages ein Event deklarieren, welches bei einer Aktualisierung ausgelöst wird. Dieses Event kannst du beim navigieren zur neuen Page abonnieren und im Eventhandler die Buttons aktualisieren.
Die gemeinsamen Eigenschaften und das Event kannst du auch in einer gemeinsamen Basisklasse deklarieren, womit auch der Zugriff auf die Member etwas einfacher wird.
Desweiteren wollte ich von den PAges aus die Button clicken um auf weitere Pages zu kommen.
Das macht so nicht wirklich Sinn. Wenn dann klickt der Benutzer auf die Buttons und die liegen nun mal außerhalb der Page bzw. überlappen diese maximal. Wenn du nun innerhalb der Page den Click auf einen Button simulieren willst, dann würde ich wieder ein Event auslösen welches von außen abonniert wurde. Im Eventhandler kannst du dann den selben Code aufrufen wie in den Click-Handlern des jeweiligen Buttons.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 10. August 2016 06:36
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 25. August 2016 07:31
Alle Antworten
-
Hallo Cay,
auf die Buttons selbst greifst du am besten gar nicht zu. Hier ist die Frage was du genau willst. Wenn in der Page etwas passiert etwas mit den Buttons machen oder aber wenn ein Button geklickt wird etwas an die Page übermitteln?
Wenn du ein Pattern wie MVVM einsetzt, dann kannst du einfach an den DataContext der Page verändern bzw. in dem DataContext ein Event erstellen, welches du dann von außen abonnierst.
Wenn du dagegen nicht mit einem ViewModel arbeitest, dann brauchst du direkten Zugriff auf die Page-Instanz. Diese bekommst du von der Content-Eigenschaft des Frames:
var page = MainFrame.Content as Page1; if(page != null){ //greife auf die Page zu bzw. abonniere ein Event o.ä. }
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hallo Tom,
ich habe auf dem Mainwindows Buttons die ich ein oder ausblenden lassen möchte so das ich von jeder Page aus sagen kann ich benötige diesen Button oder diesen Button nicht.
Das wollte ich mit visibility.collapsed machen aber dazu muss ich ja von den pages aus auf das Mainwindows zugreifen.
Desweiteren wollte ich von den PAges aus die Button clicken um auf weitere Pages zu kommen.
Oder hättest du eine andere Idee ???
danke Cay
- Bearbeitet joksch_c Donnerstag, 4. August 2016 12:01
-
Hallo Cay,
hier würde ich wohl so vorgehen, dass jede Page mit mehreren Eigenschaften oder einem Array (o.ä.) nach außen hin zeigt welche Buttons sie braucht. Wenn du nun zu einer neuen Seite navigierst, dann geschieht das ja innerhalb des Windows wo du auch zugriff auf die Buttons hast. Dort kannst du dann die Eigenschaft auslesen und die Buttons entsprechend wegblenden.
Wenn du nach der Navigation die Button-Status verändern willst, so würde ich innerhalb der Pages ein Event deklarieren, welches bei einer Aktualisierung ausgelöst wird. Dieses Event kannst du beim navigieren zur neuen Page abonnieren und im Eventhandler die Buttons aktualisieren.
Die gemeinsamen Eigenschaften und das Event kannst du auch in einer gemeinsamen Basisklasse deklarieren, womit auch der Zugriff auf die Member etwas einfacher wird.
Desweiteren wollte ich von den PAges aus die Button clicken um auf weitere Pages zu kommen.
Das macht so nicht wirklich Sinn. Wenn dann klickt der Benutzer auf die Buttons und die liegen nun mal außerhalb der Page bzw. überlappen diese maximal. Wenn du nun innerhalb der Page den Click auf einen Button simulieren willst, dann würde ich wieder ein Event auslösen welches von außen abonniert wurde. Im Eventhandler kannst du dann den selben Code aufrufen wie in den Click-Handlern des jeweiligen Buttons.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 10. August 2016 06:36
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 25. August 2016 07:31