良辰wpf技巧
microsoftWPF-Samples
1)TextBox多行输入,添加 AcceptsReturn="True" 即可。

2)WPF布局
要兼容win7,创建项目的时候需要选.Net Framework 4.0,因为3.5太老了图片都会模糊不清晰,4.5的话xp系统用户不能用。
3)保存文件
4)带dll发布到exe里,把dll拷贝到resource里面。把Debug改为Release,按F5,拷贝出exe就可以了。看12条
5) 添加库:"工具" -> "NuGet包管理" -> N,搜索ZXing.Net库,安装。
6)按钮加相应事件:双击按钮就可以自动创建点击事件,或xml里面添加Click="cbClick",也可以点击"属性"上的"小闪电"按钮。
7) 获取TextBox里面的值:在xml里面加name属性,代码里用this.xxx.Text可以获取到里面的值。Label用.Content可以获取到值。
8) wpf里面打印的方法:Console.WriteLine("ok");
9) 注释代码的方法:注释:按 Ctrl + K 键;再按 Ctrl +C 键。 取消注释:按 Ctrl + K 键;再按 Ctrl +U 键
10)复制黏贴:Clipboard.SetText(""); Clipboard.GetText();
11) Bitmap找不到问题,"解决方案资源管理器" -> 右键"引用" -> "添加引用" -> 搜索"drawing",确定添加。
12)把dll放到exe里,新建文件夹resource,拷贝dll到该目录,双击"Resources.resx” -> "添加现有文件(添加资源那里)" -> 代码MainWindow.xaml.cs里加2段

System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    string dllName = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll", "");
    dllName = dllName.Replace(".", "_");
    if (dllName.EndsWith("_resources")) return null;
    System.Resources.ResourceManager rm = new System.Resources.ResourceManager(GetType().Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly());
    byte[] bytes = (byte[])rm.GetObject(dllName);
    return System.Reflection.Assembly.Load(bytes);
}

// InitializeComponent()函数前面,加一行。
public MainWindow()
{
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
    InitializeComponent();
}

13)wpf更换icon,右键"解决方案" -> "属性" -> 图标选择.ico文件
14)wpf好看的UI界面,MaterialDesignThemes, MahApps.Metro, 其他UI框架
15) 获取本地ip,函数getLip()

// 获取本机ip
public static string getLip()
{
    var arrIp = GetLocalIpAddress("InterNetwork");
    return arrIp[0];
}
// 获取本机所有ip地址s <param name="netType">"InterNetwork":ipv4地址,"InterNetworkV6":ipv6地址</param>
public static List<string> GetLocalIpAddress(string netType)
{
    string hostName = Dns.GetHostName();                    //获取主机名称
    IPAddress[] addresses = Dns.GetHostAddresses(hostName); //解析主机IP地址

    List<string> IPList = new List<string>();
    if (netType == string.Empty)
    {
        for (int i = 0; i < addresses.Length; i++)
        {
            IPList.Add(addresses[i].ToString());
        }
    }
    else
    {
        //AddressFamily.InterNetwork表示此IP为IPv4,
        //AddressFamily.InterNetworkV6表示此地址为IPv6类型
        for (int i = 0; i < addresses.Length; i++)
        {
            if (addresses[i].AddressFamily.ToString() == netType)
            {
                IPList.Add(addresses[i].ToString());
            }
        }
    }
    return IPList;
}

16) wpf新手C#经验
17)腾讯哈勃分析 https://habo.qq.com
18)HttpListenerException: 拒绝访问。win10问题,以管理员身份运行程序即可。
19)wpf 用线程无法访问此对象

Action action1 = () =>
{
    mw.txtGet.Text = "123";
};
mw.txtGet.Dispatcher.BeginInvoke(action1);

20)WPF截取字符串, strData = str.Substring(5); //从第6个字符开始截取,到原始字符串结束
21)wpf打开新窗口

var win = new XigkHelp();
win.ShowDialog();

22)在主线程关闭时,子线程一起关闭httpServer.IsBackground = true;使用的是Thread对象的IsBackground属性。
23)try使用,权限不足,提示报错

private HttpListener listerner = new HttpListener();
listerner.AuthenticationSchemes = auth;
listerner.Prefixes.Add("http://" + ip + ":" + port + "/");
try
{
    listerner.Start();
}
catch
{
    throw new Exception("权限不足,需要管理员权限");
} 

24) HttpListener提示权限不够,临时解决办法,使用PowerShell管理员执行

netsh http add urlacl url=http://192.168.0.132:80/ user=Everyone

//netsh 其他命令
http add urlacl url=http://192.168.0.132:8888/ user=Everyone
http show urlacl
http delete urlacl  http://192.168.0.132:8888/
// 添加防火墙
advfirewall firewall Add rule name="手机->PC,访问8888" dir=in protocol=tcp localport=8888 action=allow
// 代码添加防火墙,用 NetFwTypeLib 库
string exePath = Assembly.GetExecutingAssembly().Location;
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
INetFwAuthorizedApplication app = (INetFwAuthorizedApplication)Activator.CreateInstance( Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication"));
app.Name = "APP_NAME";
app.ProcessImageFileName = exePath;
app.Enabled = true;
netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app);

25)使用TcpListener http 替代HttpListener吧,不然老是要管理员权限。也可以用代码解决

public void AddNetshAddress(string addressIpPort)
{
    try
    {
        AddnAddress(addressIpPort, Environment.UserDomainName, Environment.UserName);
    }
    catch (Exception ex) { }
}
public void AddnAddress(string addressIp, string domain, string user)
{
    string myUrlCal = String.Format(@"http add urlacl url={0} user=Everyone", addressIp);
    ProcessStartInfo psi = new ProcessStartInfo("netsh", myUrlCal);
    psi.Verb = "runas";
    psi.CreateNoWindow = true;
    psi.WindowStyle = ProcessWindowStyle.Hidden;
    psi.UseShellExecute = false;
    Process.Start(psi).WaitForExit();//添加urlacl
}

26)C# 增删查防火墙例外
27)使用json库:Newtonsoft.Json; 二维码库:ZXing.Net
28)WPF以管理员身份运行
29) wpf关机,重启

//------------关机方法
public void guanji() 
{
    try
    {
        //启动本地程序并执行命令
        Process.Start("Shutdown.exe", " -s -t 0");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
//----------重启重启
public void chongqi()
{
   try
   {
       //启动本地程序并执行命令
       Process.Start("shutdown.exe"," -r -t 0");
   }
   catch (Exception ex)
   {
       MessageBox.Show(ex.Message);
   }
}

30) wpf好看的控件HandyControl
HandyControl是一套WPF控件库,它几乎重写了所有原生样式,同时包含80余款自定义控件。
31)优秀wfp项目
32)

标签: wpf

添加新评论