2013-07-08 4 views
5

私は私のプロジェクトでWindowと3 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> 

で、ユーザーコントロールを示し、UserControlに私が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> 

どのように制御できるかpageTransitionControlからUserControlへ移動するpageTransitionControluserControl

編集:

コードメインウィンドウの背後にある:

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

ただ、私はUserControlにあるボタンをクリックするとメインウィンドウにpageTransitionControlの方法ShowPageを実行したいです。

+0

私はこのスレッドで私の質問に与えた答えを見てください:http://stackoverflow.com/questions/17059120/change-wpf-usercontrol-depending-on-a-property-of-a-treeviewitem –

+0

それはそうです私の目標はあなた、さらに詳しい情報が追加されました@RomanoZumbé – Moslem7026

答えて

2

あなたは背後のUserControlコードからこのようなPageTransitionコントロールを見つけることができる:あなたは次のように、そこからアイデアを得ることができ

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); 
    } 
} 

その後、あなたはこのようにそれを使用することができます:

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

作品!あなたは 'PageTransition'として親をキャストしますが、私はこのコントロールの親がwindow.asであることを知っています。再帰的なコードですが、キャストはどのように行われ、エラーは発生しません! – Moslem7026

+1

キャストが不可能な場合に例外を発生させない 'as'演算子のために動作します。代わりに 'null'の値を返します。 –

0

実際に必要なのは、MVVMパターンを使用することです。代わりにContentControlを使用します。また、usercontrolリファレンスをContentプロパティに渡します。

yourContentControl.Content = new UserControl1(); 
+0

コードが編集され、詳細情報が追加されました – Moslem7026