小编Syn*_*ynn的帖子

将图像有效地存储在XML文件中

我目前正在编写一个程序,用于在XML文件中创建和填充WPF应用程序中的控件.其中一个功能是用户可以选择他想要在程序中显示的图像.此图像显示在图像控件中.选择图像后,程序会将所有数据保存回XML文件.

图像将被转换并保存如下:

byte[] bytes = new byte[1];
MemoryStream ms = new MemoryStream();
System.Drawing.Image image = new Bitmap(sPathOfImage);

image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
bytes = ms.ToArray();
XElement Image = new XElement("Image", Convert.ToBase64String(bytes));

xDocument.Add(Image);
xDocument.Save("xDocument.xml");
Run Code Online (Sandbox Code Playgroud)

这很好用,一切都很好.但是,主要问题是XElement Image的值的长度.即使是40kb的图像,长度也是60,000个标志.对于一个9mb的图像,它需要13,200,000个巨大的标志.现在我正在寻找一种更好的解决方案来将图像存储在XML文件中.

通过规范,它必须在一个XML文件中.

那么,是否有一种很好的方法可以使字符串更小,更合适的流,我错过的任何东西?任何提示都表示赞赏.

c# xml compression wpf image

5
推荐指数
1
解决办法
8968
查看次数

将自定义命令设置为以编程方式创建的按钮

我是WPF的新手,并尝试创建一个从XML文件构建自己的接口.新构建的界面包含不同的控件,如文本框,标签或按钮.最后一个让我头疼几天,因为每个按钮都会得到自己的命令.

按钮的示例XML代码:

ID="1001" GroupID="1" Control="Button" Content="Apply" Margin="2" Width="60"
Run Code Online (Sandbox Code Playgroud)

这是定义每个按钮的方法:

public Button Button(XElement xElement, Button newButton)
{
    if (xElement.Attribute("Width") != null)
        newButton.Width = Convert.ToDouble((xElement.Attribute("Width").Value));

    if (xElement.Attribute("Content") != null)
    {
        string sContent = xElement.Attribute("Content").Value;

        //Here gets the button its command
        Commands Commands = new Commands();
        Commands.setCommand(sContent, newButton);
        newButton.Content = sContent;
    }
    return newButton;
}
Run Code Online (Sandbox Code Playgroud)

内容属性同时命名按钮和功能.

问题:基本上我尝试构建一个包含所有可能命令的命令类.每次创建按钮时,该setCommand(sContent, newButton)方法都会扫描commands该类,并通过Switch-Case语句将匹配命令设置为此按钮.

现在,每次单击按钮时,都会触发分配的命令.但这样做甚至可能这样做,还是我走错了路?有没有更简单的解决方案来做到这一点,还是我只是缺少命令绑定的基本要素?

任何提示都表示赞赏.

c# wpf mvvm commandbinding

1
推荐指数
1
解决办法
2767
查看次数

标签 统计

c# ×2

wpf ×2

commandbinding ×1

compression ×1

image ×1

mvvm ×1

xml ×1