0

考虑一个有 2 个页面的 WPF 程序,您可以在它们之间导航。(上传和裁剪)

在第一页中,您使用按钮加载图像,选择图像,您的图像将出现在 WPF Image 控件中。然后,您按下“裁剪”按钮。这会将导航发送到第二页,您可以裁剪图像。

然后,您在第二页中裁剪图像。然后按“下一步”。下一步按钮必须将您重定向到第一页,但请稍等,您加载的图像不再存在于页面中。因为这是一个新的页面。

    Dim CropPage As New Crop(Crop_Bmp, Crop_BmpSource)
    Me.NavigationService.Navigate(CropPage)

你可能觉得没问题。因为我们传递了参数,所以我们可以使用该参数重新填充 WPF Image 控件。但是,页面 1 中实际上有 8 个上传面板。因此,其他的很重要。

或者想想我找到的另一种方法。不要使用新的页面实例,而是返回您使用的页面。

    Upload.Crop_Bmp = Crop_Bmp
    Upload.Crop_BmpSource = Crop_BmpSource
    Me.NavigationService.GoBack()
    Upload.Crop()

但是在第二个中,它会引发错误。

“对非共享成员的引用需要对象引用。”

然后,回到上传页面,我将变量和函数设为“共享”。但随之而来的是更多的问题。因为您无法编辑局部变量,除非您也将它们设为共享。因此,所有变量和函数都需要“共享”。

我正在寻找几天的解决方案,但我无法摆脱它们。我应该使用什么方法?重定向回来,还是打开一个新实例?

在旧类型的应用程序中,这非常容易。就是这样:

    Form1.Crop_Bmp = Crop_Bmp
    Me.Hide()
    Form1.Crop()

它运行良好。因为表单不是 WPF 页面之类的实例。这就是我觉得 WPF 很奇怪的原因。

4

2 回答 2

0

我发现这是一种方法。导航到裁剪页面时,我将上传页面作为参数发送到裁剪页面。

    Dim CropPage As New Crop(Crop_Bmp, Crop_BmpSource, Me)
    Me.NavigationService.Navigate(CropPage)

然后,在作物:

Public Sub New(ByVal Crop_Bitmap_ As Bitmap, ByVal Crop_BitmapSource_ As BitmapSource, ByVal pg As Upload)

    ' This call is required by the designer.
    InitializeComponent()

    UploadPage = pg

然后,在裁剪页面中,我访问了该参数以修改其元素。例如:

    Me.NavigationService.Navigate(UploadPage)
    UploadPage.Crop()
于 2012-12-03T00:48:44.233 回答
0

这听起来像是 Pages 隐喻的一个糟糕的用例。页面用于松散耦合的对等屏幕(例如,每个部门都有一个单独的页面),但您在紧密耦合的父子关系中使用它们。(“裁剪”页面是“上传”页面的子页面)对于您正在做的事情,将裁剪屏幕作为模式对话框启动可能更合适。

如果您想将所有内容保留在同一个窗口中,您可以将两个功能保留在同一个窗口中,并根据需要切换它们的可见性。

于 2017-03-14T16:55:34.317 回答