2013-07-08 12 views
5

mam Window i trzy UserControl w moim projekcie, mam kontroli wskazujące usercontrol w sobieDostęp do głównego sterowania okno w UserControl

<Window x:Class="Hesabdar.winMain" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:pageTransitions="clr-namespace:WpfPageTransitions;assembly=WpfPageTransitions" 
     Title="winMain" Height="500" Width="600" Loaded="Window_Loaded_1"> 
    <Grid> 
     <pageTransitions:PageTransition Name="pageTransitionControl" TransitionType="SlideAndFade" /> 
    </Grid> 
</Window> 

aw UserControl mam Button:

<UserControl x:Class="Hesabdar.ucMain" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" Height="500" Width="600"> 
    <Grid> 
      <Button Content="Manege" HorizontalAlignment="Left" Margin="391,163,0,0" Click="Button_Click_1"/> 
    </Grid> 
</UserControl> 

Jak to jest możliwe? Sterowanie pageTransitionControl od UserControl nawigacją pageTransitionControl do innych userControl

Edit:

kod związany z MainWindow:

ucMain objUC = new ucMain(); //Declare Instance Of user Control 
pageTransitionControl.ShowPage(objUC); // Show Instance of usercontrol in PageTransitionControl 

Tylko chcę uruchomić metoda ShowPage z pageTransitionControl w MainWindow z kliknięciem przycisku, który znajduje się w UserControl.

+0

Spójrz w odpowiedzi na moje pytanie w tym wątku: http://stackoverflow.com/questions/17059120/change-wpf-usercontrol-depending-on-a-property-o--treeviewitem –

+0

wydaje się że mój cel jest inny Ty, Więcej informacji Dodano @Romano Zumbé – Moslem7026

Odpowiedz

2

Można znaleźć kontrolę PageTransition takiego z kodu UserControls za:

public static PageTransition FindPageControl(DependencyObject child) 
{ 
    DependencyObject parent= VisualTreeHelper.GetParent(child); 

    if (parent == null) return null; 

    PageTransition page = parent as PageTransition; 
    if (page != null) 
    { 
     return page; 
    } 
    else 
    { 
     return FindPageControl(parent); 
    } 
} 

Wtedy można go używać tak:

this.FindPageControl(this).ShowPage(...); 
+0

to działa! odrzuciłeś rodzica jako "PageTransition", ale wiem, że rodzicem tej kontrolki jest window.as wiem, że jest to kod rekursywny, ale jak został obsłużony i nie ma błędu! – Moslem7026

+1

Działa z powodu operatora 'as', który nie powoduje wyjątku, jeśli rzutowanie jest niemożliwe. Zamiast tego zwraca wartość 'null'. –

0

To, czego naprawdę potrzebujesz, to użyć wzorca MVVM. Zamiast tego użyj ContentControl. I przekaż referencję użytkownika do właściwości Content. można uzyskać pomysł z niego, jak:

yourContentControl.Content = new UserControl1(); 
+0

Kod Edycja i więcej informacji dodano – Moslem7026

Powiązane problemy