|
6楼
楼主 |
发表于 2012-8-10 18:15:24
|
只看该作者
本帖最后由 Gorgon_Meducer 于 2012-8-23 14:39 编辑
Others
1、 如何通过代码将指定的扩展名与指定的应用程序邦定在一起
- using Microsoft.Win32;
- ...
- string extension = ".testDoc";
- string title = "SingleInstanceApplication";
- string extensionDescription = "A Test Document";
- FileRegistrationHelper.SetFileAssociation(
- extension, title + "." + extensionDescription);
复制代码 该代码只需要运行一次,以后每次双击指定的扩展名,指定的应用程序就会被执行,
并且目标文件会作为应用程序参数传递进来。
2、 如何动态加载和保存WPF对象到BAML
- using System.IO;
- using System.Windows.Markup;
- using System.CodeDom.Compiler;
- using System.Reflection;
- using System.Runtime.InteropServices;
- using Microsoft.Build.BuildEngine;
- public static class BamlWriter
- {
- public static void Save(object obj, Stream stream)
- {
- string path = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
- Directory.CreateDirectory(path);
- try
- {
- string xamlFile = Path.Combine(path, "input.xaml");
- string projFile = Path.Combine(path, "project.proj");
-
- using (FileStream fs = File.Create(xamlFile))
- {
- XamlWriter.Save(obj, fs);
- }
- Engine engine = new Engine();
- engine.BinPath = RuntimeEnvironment.GetRuntimeDirectory();
- Project project = engine.CreateNewProject();
- BuildPropertyGroup pgroup = project.AddNewPropertyGroup(false);
- pgroup.AddNewProperty("AssemblyName", "temp");
- pgroup.AddNewProperty("OutputType", "Library");
- pgroup.AddNewProperty("IntermediateOutputPath", ".");
- pgroup.AddNewProperty("MarkupCompilePass1DependsOn", "ResolveReferences");
- BuildItemGroup igroup = project.AddNewItemGroup();
- igroup.AddNewItem("Page", "input.xaml");
- igroup.AddNewItem("Reference", "WindowsBase");
- igroup.AddNewItem("Reference", "PresentationCore");
- igroup.AddNewItem("Reference", "PresentationFramework");
- project.AddNewImport(@"$(MSBuildBinPath)\Microsoft.CSharp.targets", null);
- project.AddNewImport(@"$(MSBuildBinPath)\Microsoft.WinFX.targets", null);
- project.FullFileName = projFile;
- if (engine.BuildProject(project, "MarkupCompilePass1"))
- {
- byte[] buffer = new byte[1024];
- using (FileStream fs = File.OpenRead(Path.Combine(path, "input.baml")))
- {
- int read = 0;
- while (0 < (read = fs.Read(buffer, 0, buffer.Length)))
- {
- stream.Write(buffer, 0, read);
- }
- }
- }
- else
- {
- // attach a logger to the Engine if you need better errors
- throw new System.Exception("Baml compilation failed.");
- }
- }
- finally
- {
- Directory.Delete(path, true);
- }
- }
- }
- public static class BamlReader
- {
- public static object Load(Stream stream)
- {
- ParserContext pc = new ParserContext();
- return typeof(XamlReader)
- .GetMethod("LoadBaml", BindingFlags.NonPublic | indingFlags.Static)
- .Invoke(null, new object[] { stream, pc, null, false });
- }
- }
复制代码 3、 可以通过下面的方法获得系统当前所有有效的字体:- foreach (FontFamily fontFamily in Fonts.SystemFontFamilies)
- {
- lstFonts.Items.Add(fontFamily.Source);
- }
复制代码 4、 在任意时刻都可以通过静态方法Mouse.OverrideCursor来强行指定
当前的鼠标指针状态。例如:- Mouse.OverrideCursor = Cursors.Wait;
复制代码 5、 可以通过下面的方法动态的从Assembly里加载鼠标指针资源:- StreamResourceInfo sri = Application.GetResourceStream(
- new Uri("stopwatch.ani", UriKind.Relative));
- Cursor customCursor = new Cursor(sri.Stream);
- this.Cursor = customCursor;
复制代码 4、 每一个APP都可以通过IsolateStorageFile类来构建一个独享的虚拟存储空间,
大小是512KB,这是一种比临时文件更安全的方式——当然在空间大小满足,
要求的情况下。使用例程如下:- // Write to isolated storage.
- try
- {
- IsolatedStorageFile store =
- IsolatedStorageFile.GetUserStoreForApplication();
- using (IsolatedStorageFileStream fs = new IsolatedStorageFileStream("highscores.txt", FileMode.Create, store))
- {
- WriteHighScores(fs);
- }
- }
- catch { ... }
复制代码 5、 可以通过System.IO.Compression下的DeflateStream 或者 GZipStream 来实现文件(流)的压缩。
6、 从指定的Assembly中获取资源文件的例子:- img.Source = new BitmapImage(
- new Uri("ImageLibrary;component/images/winter.jpg", UriKind.Relative));
复制代码 指定Assembly的同时指定其版本:- img.Source = new BitmapImage(
- new Uri("ImageLibrary;v1.25;component/images/winter.jpg",
- UriKind.Relative));
复制代码 指定版本的同时指定public key:- img.Source = new BitmapImage(
- new Uri("ImageLibrary;v1.25;dc642a7f5bd64912;component/images/winter.jpg",
- UriKind.Relative));
复制代码 7、 通过列表类控件删除DataRow的时候,下面的方法是错误的:- products.Rows.Remove((DataRow)lstProducts.SelectedItem);
复制代码 在这里,products是一个DataTable对象。错误的原因有二:首先,SelectedItem实际上不是DataRow而是DataRowView
封装后的结构;其次,通常我们删除DataRow并不是想从DataTable中删除该行,而是想在DataTable中将其标记为删除,
这样在我们与后台数据库进行同步的更新的时候才会将对应的内容删除。基于以上原因,应该使用以下的代码:- ((DataRowView)lstProducts.SelectedItem).Row.Delete();
复制代码 |
|