前辈指点:WPF桌面应用如何实现同一窗口下的界面切换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前辈指点:WPF桌面应用如何实现同一窗口下的界面切换相关的知识,希望对你有一定的参考价值。

1、canver 隐藏切换。不需要进行数据传递。
2、使用frame+page 进行功能切换。对页面功能可独立编辑。
参考技术A 用contentControl,每次换掉contentControl的view。或者用frame控件。

WPF图片部分显示问题!求高人指点!

我欲用WPF做一个扑克牌游戏就是Windows自带的Solitaire游戏的UI界面,需要用到所有扑克牌的图片,Windows库里有一张集所有扑克在一起的一张图片,怎么实现显示上面特定的图片在特定的地点,求高人指点!
就是比如说,你有一张大的图片中,可以剪切为10×10=100张图片(就是照身份证照片时候有很多张头像打印在一张纸上),想取任意一张显示在一个地方,怎么取? 而且要随窗口变化大小也不会改变显示的图片内容,但是大小可以改也可不改。

参考技术A 先用BitmapImage把那张大图读取出来,然后按照扑克牌图片的大小分割它的PixelArray,接着构造WriteableBitmap写入即可。追问

我想把图片依旧保存在那一张图片上,一次性的写入内存,再在内存中调用图片的部分,这样比较节省资源,这个能实现吗?能给出实例代码吗? 那个XAML里应该怎么写?

追答

我说的方式就是那种的。给你写了个例子:
public static class ImageService

///
/// 切割一张指定的图片
///
/// 指定的图片源
/// 图块宽度
/// 图块高度
/// 切割好的图片数组(从左往右,从上往下)
public static ImageSource[] SplitImage(BitmapSource source, int tileWidth, int tileHeight)

// 本来对参数有校验代码,结果字数超限了
var colCount = source.PixelWidth / tileWidth;
var rowCount = source.PixelHeight / tileHeight;
var results = new ImageSource[rowCount * colCount];
var stride = tileWidth * ((source.Format.BitsPerPixel + 7) / 8);
var pixelsCount = tileWidth * tileHeight;
var tileRect = new Int32Rect(0, 0, tileWidth, tileHeight);

for (int row = 0; row < rowCount; row++)

for (int col = 0; col < colCount; col++)

var pixels = new int[pixelsCount];
var copyRect = new Int32Rect(col * tileWidth, row * tileHeight, tileWidth, tileHeight);
source.CopyPixels(copyRect, pixels, stride, 0);
var wb = new WriteableBitmap(
tileWidth,
tileHeight,
source.DpiX,
source.DpiY,
source.Format,
source.Palette);
wb.Lock();
wb.WritePixels(tileRect, pixels, stride, 0);
wb.Unlock();

results[row * colCount + col] = wb;



return results;

追问

我对这个图像处理的代码 真的看不懂,你能一步步的标注,然后发到我的邮箱吗? 谢谢了。。。543690817@qq.com 谢谢了

追答

已发邮件 :)

以上是关于前辈指点:WPF桌面应用如何实现同一窗口下的界面切换的主要内容,如果未能解决你的问题,请参考以下文章

WPF图片部分显示问题!求高人指点!

WPF做一个界面,Label的字体如何随窗口的大小变化?

WPF将窗口置于桌面下方(可用于动态桌面)

WPF如何实现悬浮窗和主窗口的切换?

WPF MVVM里,当用户在新窗口执行完后如何返回原窗口,并刷新

请教winform刷新问题