在 WPF 中引用来自模块的调用窗口 VB.net

Referencing Calling Window From Module in VB.net WPF

提问人:ExpertOnNothing 提问时间:11/4/2023 最后编辑:CraigExpertOnNothing 更新时间:11/6/2023 访问量:42

问:

我有一个带有一堆窗口的项目。我还有另一个窗口,用户可以在其中选择窗口的背景。我有一个模块,我想用它来设置实际的图像。这样一来,我就不需要在每个窗口上都写一大堆代码了......只有一行。

modDothing.setthewallpaper(Me)

但这是行不通的。它在我的模块中告诉我窗口未定义。

我已经注释了我尝试过的一些东西,但它们都不起作用——否则我就不会在这里了。我确信我在做一些愚蠢的事情。这是我用 (Me) 调用子程序的方式吗?感谢您对此的任何帮助

Module modDoThings

    Public Sub setthewallpaper(ByVal window3 As Window)
        'MsgBox(window3.GetType.Name)
        'Application.Current.Windows.OfType(Of window3)().First().Close()

        Dim theWindow As Window = TryCast(window3, Window)

        Dim ih As New imageHolder
        Dim finalImage As Image = New Image()
        finalImage.Width = 380
        finalImage.Height = 300
        finalImage.Margin = New Thickness(5)
        Dim logo As BitmapImage = New BitmapImage()
        logo.BeginInit()
        logo.UriSource = New Uri(System.AppDomain.CurrentDomain.BaseDirectory & "images\myWalls\" & My.Settings.currentWall)
        logo.EndInit()
        ImageBehavior.SetAnimatedSource(theWindow.WallBackground, logo)
        ImageBehavior.SetRepeatBehavior(theWindow.WallBackground, RepeatBehavior.Forever)
        theWindow.WallBackground.Source = logo

        'Dim targetWindow = TryCast(Application.Current.Windows.Cast(Of Window)().FirstOrDefault(Function(window) TypeOf window Is theWindow), theWindow)
        'targetWindow.WallBackground.Source = logo
        'Application.Current.Windows.OfType(Of window3)().First().WallBackground.Source = logo

    End Sub

End Module

这是显示波浪线的图像。code squigglies

WPF vb.net

评论

0赞 Andy 11/4/2023
不要以其他窗口为目标。设置资源,窗口会将其作为动态资源使用。如果这是您正在做的事情,请不要尝试从某些代码库中获取应用程序。
0赞 Andy 11/4/2023
也。除非这个标志非常繁琐,否则我会从矢量的角度来考虑。几何图形和/或路径,而不是图片。
0赞 jmcilhinney 11/4/2023
您已经向我们展示了错误在哪里,但没有向我们展示错误所在。您需要提供错误消息。不过,在这种情况下,问题似乎很明显,错误消息会确切地说明问题是什么。变量是 type,并且该类型没有名为 的成员。theWindowWindowWallBackground
0赞 jmcilhinney 11/4/2023
顺便说一句,即使结果证明是错误的,你也应该只编写有逻辑意义的代码。如果一行代码不能做任何有用的事情,你为什么要写它?在您的例子中,您的参数是 type,您尝试将其转换为 type 。将某些东西铸造为它已经存在的类型可能有什么用处?更糟糕的是,你正在使用而不是所以你一定认为它可能不是那种类型。变量怎么可能不引用对象?window3WindowWindowTryCastDirectCastWindowWindow
0赞 ExpertOnNothing 11/4/2023
我没有收到错误,因为它没有编译。它只给我未定义“窗口”的反馈。因此,我添加了 window3 强制转换,看看这是否会“定义”它。我确实得到了 TryCast 与 DirectCast,但我只是不明白为什么当参数将其定义为窗口时它没有定义。对我来说非常困惑。我刚刚在那里添加了一些东西,我试图让它工作。

答: 暂无答案