考虑一个有两页导航的WPF程序。 (上传和裁剪)
在第一页中,使用按钮加载图像,选择图像,图像将显示在WPF图像控件中。然后,按“裁剪”按钮。这会将导航发送到第二页,您可以裁剪图像。
然后,您在第二页中裁剪图像。然后按“下一步”。下一步按钮必须将您重定向到第一页,但等待一分钟,您加载的图像不再存在于页面中。因为这是一个新页面。
Dim CropPage As New Crop(Crop_Bmp, Crop_BmpSource)
Me.NavigationService.Navigate(CropPage)
你可能认为没关系。因为我们传递参数,我们可以使用该参数重新填充WPF图像控件。但是,页面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非常奇怪的原因。
答案 0 :(得分:0)
我发现这是一种方法。导航到“裁剪”页面时,我将“上载”页面作为参数发送到“裁剪页面”。
Dim CropPage As New Crop(Crop_Bmp, Crop_BmpSource, Me)
Me.NavigationService.Navigate(CropPage)
然后,在Crop:
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
然后,在Crop页面中,我访问了该参数以修改其元素。例如:
Me.NavigationService.Navigate(UploadPage)
UploadPage.Crop()
答案 1 :(得分:0)
对于Pages隐喻来说,这听起来像是一个糟糕的用例。页面用于松散耦合的对等屏幕(E.G.每个部门的单独页面),但您使用的是紧密耦合的父子关系。 (“裁剪”页面是“上传”页面的子页面)对于您正在执行的操作,将裁剪屏幕作为模态对话框启动可能更合适。
如果您想将所有内容保存在同一窗口中,可以将两个功能保持在同一窗口中,并根据需要切换其可见性。