You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF VB.NET:从MainWindow修改运行时加载的UserControl网格背景问题

解决MainWindow修改嵌入UserControl中Grid背景色的问题

问题分析

先拆解你遇到的两个问题:

  1. 第一个写法报错「Reference to a non-shared member requires an object reference」:这是因为你直接用UserControl1.grid1访问控件——UserControl1是类名,而grid1是属于类实例的成员,不是静态(共享)成员,必须通过具体的对象实例才能访问。
  2. 第二个写法编译通过但没效果:Application.Current.Windows.OfType(Of BuildUIContainer).FirstOrDefault是在找窗口对象,但你的UserControl是嵌入在MainWindow里的控件,不是独立窗口,所以这个查询要么找不到正确的实例,要么拿到的不是你要修改的那个UserControl,自然背景色不会变。

正确解决方案

核心思路:在MainWindow中保存你嵌入的那个UserControl的实例引用,然后通过这个实例访问内部的Grid。

步骤1:保存UserControl实例引用

在MainWindow的类中声明一个成员变量,用来存储加载时创建的UserControl实例:

' MainWindow类的成员变量
Private myUserControl As UserControl1

' 在MainWindow加载时创建并嵌入UserControl的代码里
Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    myUserControl = New UserControl1()
    ' 假设你把UserControl加到MainWindow的某个容器(比如名为mainContainer的Grid/Panel)里
    mainContainer.Children.Add(myUserControl)
End Sub

步骤2:确保UserControl内的Grid可访问

默认情况下,XAML中命名的控件(比如grid1)的访问修饰符是Private,MainWindow无法直接访问。你需要修改它的访问级别:

  • 在XAML中修改:
<Grid x:Name="grid1" x:FieldModifier="public">
    <!-- Grid内容 -->
</Grid>
  • 或者在UserControl的代码后台修改:
Public grid1 As Grid

步骤3:在按钮点击事件中修改背景色

现在可以直接通过保存的实例访问grid1并修改背景:

Sub button_click(sender As Object, e As RoutedEventArgs) Handles button.click
    If myUserControl IsNot Nothing Then
        myUserControl.grid1.Background = CType(FindResource(AdonisUI.Brushes.Layout4BackgroundBrush), Brush)
    End If
End Sub

更优雅的封装写法(推荐)

如果不想把grid1暴露为公共成员,可以在UserControl1中添加一个公共方法,用来设置背景色,这样更符合面向对象的封装原则:

' UserControl1类中的代码
Public Sub SetGridBackground(backgroundBrush As Brush)
    grid1.Background = backgroundBrush
End Sub

然后在MainWindow的按钮点击事件中调用这个方法:

Sub button_click(sender As Object, e As RoutedEventArgs) Handles button.click
    If myUserControl IsNot Nothing Then
        Dim targetBrush = CType(FindResource(AdonisUI.Brushes.Layout4BackgroundBrush), Brush)
        myUserControl.SetGridBackground(targetBrush)
    End If
End Sub

内容的提问来源于stack exchange,提问作者Somanna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:12:34