都是一些基本简单的常用界面函数,全部cs文件,无DLL。
按照winform的编写方式写的代码,基本不写xaml文件,很容易看清楚。
包括:窗体无边框(窗体)、 FontAwesome字体图标、rtf转图像、动画移动控件、控件翻转、淡入淡出、控件位置获取、圆角图像、滚动条等等,
在cs文件中对照查看。使用.net 4.61及以下,不支持4.7。
基本按照一个留言板模式写的Demo,登陆、留言、用户信息等基本都有,因为是演示,没有搞得那么精致了。
用户信息在UserData.mdb,
登陆名:1001至1029,密码123456
图像及设计模式是照搬来winform的,开始仔细学习wpf,有错误或繁琐,自行修正,仅供参考
以下内容自行修改
bug修改:RichTextBox输入内容转换图像,搞成嵌入winform组件了,不科学。
修改如下:
Wpf 的RichTextBox(rich1) 插入图像:
private void Button_Click(object sender, RoutedEventArgs e)
{
string filepath = "";
OpenFileDialog openfilejpg = new OpenFileDialog();
openfilejpg.Filter = "png图片(*.png)|*.png|gif图片(*.gif)|*.gif";
openfilejpg.FilterIndex = 0;
openfilejpg.RestoreDirectory = true;
openfilejpg.Multiselect = false;
if (openfilejpg.ShowDialog() == true)
{
filepath = openfilejpg.FileName;
System.Windows.Controls.Image img = new System.Windows.Controls.Image();
BitmapImage bImg = new BitmapImage();
img.IsEnabled = true;
bImg.BeginInit();
bImg.UriSource = new Uri(filepath, UriKind.Relative);
bImg.EndInit();
img.Width = 28;
img.Height = 28;
img.Source = bImg;
img.UseLayoutRounding = true;
new InlineUIContainer(img, rich1.Selection.Start);
}
}
然后顺序取得里面的全部图像放入到List里面
public class imglist
{
public Image image;
public imglist(Image img)
{
image = img;
}
}
public static List<imglist> ImageList = new List<imglist>();
public static void ResizeRtbImages(RichTextBox rtb)
{
foreach (Block block in rtb.Document.Blocks)
{
if (block is Paragraph)
{
Paragraph paragraph = (Paragraph)block;
foreach (Inline inline in paragraph.Inlines)
{
if (inline is InlineUIContainer)
{
InlineUIContainer uiContainer = (InlineUIContainer)inline;
if (uiContainer.Child is Image)
{
Image image = (Image)uiContainer.Child;
ImageList.Add(new imglist(image));
}
}
}
}
}
}
转换为xaml
public static string ToXaml(RichTextBox richTextBox)
{
string xaml = string.Empty;
TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
using (MemoryStream ms = new MemoryStream())
{
textRange.Save(ms, System.Windows.DataFormats.Xaml);
ms.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms);
xaml = sr.ReadToEnd();
}
return xaml;
}
再替换字符串
string tmp = ToXaml(rich1);
int b = tmp.IndexOf("<Paragraph>") 11;
int t = tmp.LastIndexOf("</Paragraph>");
string tmp1 = tmp.Substring(b, t-b);
rich2.AppendText("\r\r\r" tmp1);
string tmp2 = tmp1.Replace("<Run> </Run>", "▣"). // 特殊符号
Replace("</Paragraph><Paragraph>", "\r").
Replace("<Run xml:lang=\"zh-cn\">", "").
Replace("</Run>", "");
最后画文字到一幅图像,遇到“特殊符号“顺序画ImageList[n].image就可以了
生成对话框需计算文字宽度等,参考原文件
自行修改,修改后可以用.net 4.7
评论