VB.NET WPF中从模块引用调用窗口的问题
问题解决:WPF自定义窗口背景设置模块报错处理
问题根源
你写的模块里,setthewallpaper方法的参数用了系统默认的Window类型,但你的自定义窗口包含WallBackground这个专属控件——系统原生Window类并没有这个成员,所以编译器会提示“未定义”。
修复方案
1. 创建基类窗口
先定义一个继承自Window的基类,把WallBackground的声明放在这里,让所有需要设置背景的窗口都继承这个基类:
Public Class BaseWallWindow Inherits Window ' 确保所有子类窗口都拥有该控件成员 Public Property WallBackground As Image End Class
修改你项目中各个窗口的继承关系,把Inherits Window改成Inherits BaseWallWindow。
2. 修改模块方法参数类型
把模块里的参数类型从Window改成自定义的BaseWallWindow,同时简化冗余代码:
Imports System.IO Imports System.Windows.Media.Animation ' 若用到ImageBehavior需引入对应命名空间 Module modDoThings Public Sub setthewallpaper(ByVal targetWindow As BaseWallWindow) Dim logo As New BitmapImage() logo.BeginInit() ' 用Path.Combine避免路径拼接的格式错误 logo.UriSource = New Uri(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images\myWalls", My.Settings.currentWall)) logo.EndInit() ImageBehavior.SetAnimatedSource(targetWindow.WallBackground, logo) ImageBehavior.SetRepeatBehavior(targetWindow.WallBackground, RepeatBehavior.Forever) targetWindow.WallBackground.Source = logo End Sub End Module
3. 调用方式保持不变
各个窗口里依然用一行代码调用:
modDoThings.setthewallpaper(Me)
额外提示
- 去掉了原代码中无用的
TryCast和临时变量,因为传入的Me本身就是继承自BaseWallWindow的实例,无需转换。 - 用
Path.Combine拼接路径更可靠,能自动处理不同系统的路径分隔符问题。
内容的提问来源于stack exchange,提问作者ExpertOnNothing
相关产品推荐
相关产品推荐

