访问UserControl中的主窗口控件

时间:2013-07-08 06:21:16

标签: c# wpf user-controls

我的项目中有Window和三个UserControl,我有一个显示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导航pageTransitionControl到其他userControl

修改

MainWindow背后的代码:

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

我想通过点击ShowPage中的按钮,在mainWindow中运行pageTransitionControl的方法UserControl

2 个答案:

答案 0 :(得分:2)

您可以从后面的UserControls代码中找到这样的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(...);

答案 1 :(得分:0)

您真正需要的是使用MVVM模式。请改用ContentControl。并将usercontrol引用传递给其Content属性。你可以从中得到想法,比如:

yourContentControl.Content = new UserControl1();