WPF失败了。使用WPF页面作为实例

时间:2012-12-02 23:40:18

标签: wpf navigation instance shared

考虑一个有两页导航的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非常奇怪的原因。

2 个答案:

答案 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.每个部门的单独页面),但您使用的是紧密耦合的父子关系。 (“裁剪”页面是“上传”页面的子页面)对于您正在执行的操作,将裁剪屏幕作为模态对话框启动可能更合适。

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