【问题标题】:using custom control inside wpf window在 wpf 窗口中使用自定义控件
【发布时间】:2026-02-03 02:10:01
【问题描述】:

我创建了名为 MainControl.xaml 的用户控制器。在我的 MainWindow.xaml 中(它是空的,空白的)我想插入这个 MainControl 控件。

所以我在 MainWindow 中加载了事件

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var bc = new Controls.BooksControl();
    bc.Visibility = System.Windows.Visibility.Visible;
}

但什么也没发生,显然我错过了什么

【问题讨论】:

  • 你也可以发布一些你的 MainWindow 的 XAML 吗?
  • 主窗口是空的,所以它在 xaml 中确实没有任何值得发布的东西,window init。代码和空网格标签。
  • 在这种情况下,您可以将网格的内容设置为bc。虽然您可能希望直接在 XAML 中添加控件。

标签: .net wpf


【解决方案1】:

您应该将您的控件添加到窗口中(将此新控件设置为窗口的内容):

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var bc = new Controls.BooksControl();
    bc.Visibility = System.Windows.Visibility.Visible;
    this.Content = bc;
}

【讨论】:

    【解决方案2】:

    您需要将其添加到实际容器中才能显示它。例如 Grid 或 StackPanel。如果您添加自定义 clr-namespace,您还可以直接从 XAML 中添加您的控件。

    【讨论】:

      【解决方案3】:

      我将假设您提到的 MainControl 实际上是在您公开的代码中实例化的 BooksControl

      是的,您已经在代码隐藏中创建了一个新实例,但据我所知,您没有做任何事情来实际将其添加到 布局(特别是考虑到您已经提到你的 MainWindow.xaml 是空的)。

      现在,我还要假设当您说“但什么都没有发生”时,您的意思是您的 BooksControl 没有显示在您的 中MainWindow - 如上所述,这是因为您尚未将其添加到布局中。

      执行此操作的两种主要方法是在 XAML 中或在后面的代码中:

      XAML:

      <Window x:Class="MainWindow"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xlmns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              controls="clr-namespace:Controls;assembly=Controls">
      
          <controls:BooksControl/>
      
      </Window>
      

      代码背后

      private void Window_Loaded(object sender, RoutedEventArgs e)
      {
          var bc = new Controls.BooksControl();
      
          // set the content of the Window to be the BooksControl
          // assuming the BooksControl has default Visibility of Visible
          this.Content = bc;
      }
      

      【讨论】: