wpf应用程序设置窗体背景图片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf应用程序设置窗体背景图片相关的知识,希望对你有一定的参考价值。
按照网上的教程,我先将图片添加到资源Resource.resx里,然后设置ImageBrush,吧啦吧啦……但是在debug时,报出异常,如图所示。 已试过在添加资源时将属性里的persistance设置为编译时链接或者嵌入resx,都是一样的报错,也试过重新创建一个工程保证从盘符开始的文件名都是英文,还是一样报错,求各路大侠帮忙,给出细致的回答~
参考技术A 直接右键添加啊,然后在格式那一栏里面设置为所以格式将图片添加进来,最后在代码去写上Imagesource=“sds111.jpg”就OK啦,我这里是假设图片的号码是sds111.jpg
获取当前进程(程序)主窗体句柄并设置wpf的父窗体为此句柄
有时候在c++调用wpf控件的时候,wpf控件想自己显示窗体,但需要设置owner属性。迂回解决办法是设置wpf的window窗体的父窗体为进程的句柄。
1.获取当前进程id
int id = Process.GetCurrentProcess().Id;
2.根据进程id获取进程主句柄
public static class ProcessHelper { private static class Win32 { internal const uint GwOwner = 4; internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); [DllImport("User32.dll", CharSet = CharSet.Auto)] internal static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam); [DllImport("User32.dll", CharSet = CharSet.Auto)] internal static extern int GetWindowThreadProcessId(IntPtr hWnd, out IntPtr lpdwProcessId); [DllImport("User32.dll", CharSet = CharSet.Auto)] internal static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd); [DllImport("User32.dll", CharSet = CharSet.Auto)] internal static extern bool IsWindowVisible(IntPtr hWnd); } public static IntPtr GetProcessHandle(int processId) { IntPtr processPtr = IntPtr.Zero; Win32.EnumWindows((hWnd, lParam) => { IntPtr pid; Win32.GetWindowThreadProcessId(hWnd, out pid); if (pid == lParam && Win32.IsWindowVisible(hWnd) && Win32.GetWindow(hWnd, Win32.GwOwner) == IntPtr.Zero) { processPtr = hWnd; return false; } return true; }, new IntPtr(processId)); return processPtr; } }
3.设置wpf的window的父窗体为当前进程主窗口句柄,完整代码如下:
int id = Process.GetCurrentProcess().Id; IntPtr mainPtr = ProcessHelper.GetProcessHandle(id); var win = new Window(); new WindowInteropHelper(win) { Owner = mainPtr }; win.Show();
感谢阅读。
以上是关于wpf应用程序设置窗体背景图片的主要内容,如果未能解决你的问题,请参考以下文章