【问题标题】:Access to main window control in UserControl访问 UserControl 中的主窗口控件
【发布时间】:2013-07-08 06:21:16
【问题描述】:

我的项目中有Window 和三个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>

如何控制pageTransitionControlUserControl 导航pageTransitionControl 到其他userControl

编辑:

MainWindow 后面的代码:

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

只是我想通过单击UserControl 中的按钮在mainWindow 中运行ShowPagepageTransitionControl 方法。

【问题讨论】:

标签: c# wpf user-controls


【解决方案1】:

您可以从后面的 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(...);

【讨论】:

  • 它有效!您将父级转换为 PageTransition ,但据我所知,此控件的父级是 window.as 我知道它是递归代码,但是如何进行转换并且没有发生错误!?
  • 由于as 运算符的作用,如果无法进行强制转换,它不会导致异常。相反,它返回一个值null
【解决方案2】:

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

yourContentControl.Content = new UserControl1();

【讨论】:

  • 已编辑代码并添加了更多信息
猜你喜欢
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多