Ensure WPF Taskbar Window Preview is actualized - wpf

How can I ensure that the hower preview of my WPF application (.net 4) is refreshed when the user places the mouse over the taskbar icon.
I have an app that visualizes some status values. If the app window is minimized and the user hovers over the taskbar button, the preview window that is shown shows the last view of the window at which the window was active. However I would like to have an actualized view.
Is there a possiblity to achieve that?

I believe you'd need to customize the preview, as described here (under the Customizing Preview section). Which leverages the Windows API Code Pack for Microsoft® .NET Framework.
An example can be found here, but looks like:
TabbedThumbnail preview = new TabbedThumbnail(parentForm.Handle, childForm.Handle);
TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(preview);
preview.TabbedThumbnailBitmapRequested += (o, e) =>
{
Bitmap bmp = new Bitmap(width, height);
// draw custom bitmap...
e.SetImage(bmp);
e.Handled = true;
};
Another example, can be found here which states:
The CustomWindowsManager class
provides an abstraction of a
customized window thumbnail preview
and live preview (peek), including the
facilities to receive a notification
when a preview bitmap is requested by
the Desktop Window Manager (DWM) and
to automatically grab the preview
bitmap of a window.
The download link for this code is here, which includes the CustomWindowsManager class. This appears to provide the live preview.

You probably can't. Windows 7 pipes the graphics of an open window to the live preview from the Taskbar. It can't know what the window now looks like while it is minimized because it isn't being drawn at all.
I guess it's not impossible to do custom thumbnails. Aside from CodeNaked's answer, I also found this article, which even includes multiple thumbnails from the same app.

Related

Toolbar disappears when viewing PDF HTML5 WebView2

I am using a WebView2 control in a WPF application to show a PDF to the user
This is normally displayed with a nice little toolbar, all part and parcel of rendering a PDF in a WebView2 control, allowing the user to navigate to other pages, zoom in or out, rotate, etc.
However, we found that as the window gets a bit narrower at some point this toolbar simply disappears. Is there something we can do to stop this happening?
As the available space for the PDF toolbar shrinks the PDF toolbar shows fewer and fewer controls. This is also true in the browser. However, in the browser the minimum horizontal width of the browser window is a value at which the PDF toolbar is still visible.
I'm not sure if this behavior is by design or not. You can try opening a bug report about this on the WebView2 feedback repo.

Is it possible to override the some of the UI of the default Chromium PDF viewer using CefSharp?

I'm trying to implement a PDF viewer for a Xamarin.Forms WPF application, and I'm using CefSharp to load and render the PDF file. However I've been unable to perform the necessary customizations on the default Chromium PDF Viewer, or PDFium, as far as my research goes.
This is what I need to change, and the image with the corresponding items:
A - Remove the toolbar.
B - Customize the scrollbar.
C - Remove the zoom items.
D - Change the background color.
I think that the scrollbar I might be able to change on the Xamarin side of things, the other items however, I'm quite sure I'll have to deal with PDFium or Chromium.
When I open a PDF file on Google chrome, I'm able to remove the toolbar and the zoom items using some simple JavaScript. This is the source that I see when I inspect the elements of the PDF viewer on Google Chrome:
Using these JavaScript statements in the Console Window I can remove the toolbar and zoom items (but only within Google Chrome:
Remover toolbar:
document.getElementById("toolbar").remove()
Remove zoom items:
document.getElementById("zoom-toolbar").remove()
This is the custom implementation of the CefSharp RenderProcessMessageHandler that I created in order to try to get to the source and run these JavaScript instructions and customize the control as I've been able to do within the Google Chrome browser:
class PdfRenderProcessMessageHandler : IRenderProcessMessageHandler
{
// <other methods required by the interface>
// Method called when the context is created
public void OnContextCreated(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
frame.ExecuteJavaScriptAsync("document.getElementById('toolbar').remove()");
frame.ExecuteJavaScriptAsync("document.getElementById('zoom - toolbar').remove()");
frame.ViewSource(); //Display the source code
}
}
However when I call the frame.ViewSoure() method to view the source code, this is the source code that I get:
So it seems pretty obvious that the code that I have when viewing a PDF file through Google Chrome and the code that I have when viewing the same file through CefSharp ChromiumWebBrowser it's pretty different.
Am I intercepting the source code at the wrong point, how can I have access to the full source when using CefSharp? Even if I can't change the background color (based on my research), removing the toolbar, zoom items and scrollbar could solve my problem.
Does anyone know how I might be able to achieve this?
I found a solution.
In XAML just use:
src="file.pdf#toolbar=0"
And in CodeBehind use:
browser.Load(pathToFile + "#toolbar=0");

WPF Window with Control in Full Screen Mode

I have a WPF window hosting a web browser control. I want this WPF window to always be on top. Now for example user surfs to a Youtube page and the web player plays a video. User clicks on the full screen button in the Youtube player and the video fills the screen. But my WPF window that hosts web browser control now is still on top of everything and it looks weird because in the background, the video plays fullscreen.
Is there any way an embedded control can tell WPF window that it's in fullscreen mode now so that the WPF is no longer on top, say maybe hidden?
Thanks for any advice!
Try to play with Topmost property. If you display content not in Popup than this should works:
window.Topmost = false;

"Please wait" Windows in WPF

I need to create a "please wait" window at the start up of my application, start animation and at the lifetime of app change visibility. I don`t want create explicitly new thread (Maybe ThreadPool or BackgroundWorker).
Any ideas?
WPF has a very nice splash screen class exactly for that: http://www.codeproject.com/Articles/36418/WPF-Splash-Screen.aspx
Here is the quick steps:
Add the image file to the WPF Application project. For more information, see How to: Add Existing Items to a Project.
In Solution Explorer, select the image.
Add the image file to the WPF Application project. For more information, see How to: Add Existing Items to a Project.
In the Properties window, click the drop-down arrow for the Build Action property.
Select SplashScreen from the drop-down list
(source here: WPF SplashScreen implementing)

Background HTML visibiltiy in Silverlight Full Screen Mode

I am creating a page with Silverlight component and some HTML controls.
On enabling Silverlight's full screen, I am unable to view the background HTML controls. Even if I set the xaml's background to transparent.
Please let me know if it's possible to view the HTML controls in full screen mode of Silverlight or not.
Thanks
I doubt that such thing is possible, for security reasons, as the keybordsupport in Fullscreen is. It would enable you create such things as a app totally visible observing the movements.
But I might be wrong !
Fullscreen mode takes the content currently restricted to rectangle on hosts window (the Browser client area window) and displays it on full screen window. This full screen window is a new window and contains only the Siverlight content.
When silverlight is rendering in a windowless mode it is simply rendering directly on to the host window. When you got fullscreen mode in Silverlight you are not affecting the hosts window, fullscreen effectively suppends windowless mode as it needs a new window of its own to render on.

Resources