我正在尝试使用 ImageTools 生成图像,并且我的代码可以正常工作并成功创建图像……但前提是我在尝试创建图像之前有用户输入!
例如,如果我尝试在 New sub 中生成图像,则会创建图像,但它们仅包含画布中的文本框控件而不包含图像(我的控件由文本 + 图像组成)。所以正在创建图像......但它只呈现部分内容。
如果我在我的页面上放置一个按钮并从按钮单击甚至处理程序生成我的图像,则图像会正确生成。
那么我在这里做错了什么?以及如何在没有用户输入的情况下生成我的图像(即应用程序启动时)。
我使用 WriteableBitmap 代替 ImageTools,FWIW 得到了完全相同的结果。
我使用画布和我的文本/图像元素创建堆栈面板,然后使用标准代码将图像渲染到独立存储中的文件。由于在用户输入后一切正常,我不知道要提供代码的哪些部分......我基本上使用的是未经修改的示例代码。
代码部分(这都在我的 MainPage.XAML.VB 中):
Public Sub New()
InitializeComponent()
' some code commented out while debugging - not relevant here
SetupHubTiles() ' this is the method that sets up the images (see below)
End Sub
SetupHubTiles 方法多次调用以下方法:
Public Sub CreateHubTile(background As StackPanel, tileImage As String, tiletoupdate As HubTile)
Dim isoStoreTileImage = String.Format("isostore:{0}", tileImage)
'Create a bitmapImage to IsolatedStorage.
Using store As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()
'Tile image's Height * Width are 173 * 173.
Dim bitmap = New WriteableBitmap(173, 173)
'Render a bitmap from StackPanel.
bitmap.Render(background, New TranslateTransform())
Dim stream = store.CreateFile(tileImage)
bitmap.Invalidate()
bitmap.SaveJpeg(stream, 173, 173, 0, 100)
stream.Close()
End Using
SetHubTileImage(tileImage, tiletoupdate) ' this is what sets a control on the MainPage to display the generated image
End Sub
最后是按钮单击处理程序(我刚刚实现了它,因为我使用的代码在另一个应用程序中运行良好,但该应用程序总是在创建图像之前获取用户输入,所以我认为这是两个应用程序之间的唯一区别)
Private Sub StartButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles StartButton.Click
SetupHubTiles()
End Sub
正如您所看到的,正在执行的代码是相同的,但是当我直接在我的构造函数中运行它时,与从按钮单击处理程序运行它相比,我得到了不同的结果。
目标是在运行时生成这些图像(无需用户进行任何交互)以在 UI 中使用。
我尝试了几种不同的方法,但我总是得到相同的结果 - 当应该有文本 + 图像时,生成的图像只有文本。我在其他应用程序中使用相同的方法,唯一的区别是其他应用程序不会在应用程序启动后立即创建图像,这可能是问题所在。
如果我更改用于构建图像的控件的位置/类型,这似乎也没有什么不同。