2010年7月26日 星期一

轉錄 Silverlight 支援多國語言

轉錄自 kevin Yang 的博客


主要是利用 定義 資源 resource 的方式 來 達成多國語言的方法, ex . StringLibrary.resx


有幾點要注意:

1. 定義好得資源(StringLibrary.resx)要裡面的屬性要設為 public
2. 若資源有新增欄位的話,要重新設定程式為public, 系統會自動改為internal
3. XAML檔要引用資源
4. 語法如下 假設是 text 是要多國語言的地方
Text="{Binding TE , Source={StaticResource MyStringLibrary}}
TE 是欄位名稱, MyStringLibrary 是在引用的時候所取得名字
5. 修改 Xap 的 SupportedCultures 屬性

System.Net.Mail.Attachment 附件含有中文所遇到的錯誤

詳細的狀況是這樣:
利用 System.Net.Mail.Attachment 的功能在 c# 程式 中寄信但是附件內容含有繁體或簡體中文就會錯誤!

我的解法是這樣:

先宣告一個 Attachment attchment;

一個 file 叫 新增文字文件.txt

將 新增文字文件.txt 放入附件

如code
attachment = new Attachment( "新增文字文件.txt ");


屬性設為 Name = 新增文字文件.txt ;
屬性設為 NameEncoding = Encoding.UTF8;
不要設定 attachment.ContentDisposition.FileName 的值, 因為這個屬性不支援中文

在我的測試下這樣就可以了

可以參考

http://webcache.googleusercontent.com/search?q=cache:w-S50DVqJycJ:blog.csdn.net/xrascal/archive/2009/07/12/4341062.aspx+attachment.ContentDisposition.FileName&cd=5&hl=zh-TW&ct=clnk&gl=tw

2010年7月12日 星期一

WPF 教學網站心得摘要 lesson 21-24

看完 微軟所提供的教學影片 所紀錄下來的心得摘要

網址
http://msdn.microsoft.com/zh-tw/netframework/cc963622.aspx


#21 控制項的資料繫結技巧 #4 – 階層式資料繫結
1. 引用cs 檔 在xaml
ex. 引用 Demo 的空間 (空間定義在Data.cs)並叫做 src
即code 為 "Demoxmlns:src="clr-namespace:Demo"

2. grid 裡面定資源 命名為 dso 型別是 LeagueList
ex. ObjectDataProvider x:Key="dso" ObjectType="{x:Type src:LeagueList}"

3. 定義 tree view 引用 dso
ex. <TreeViewItem Header="Demo #1"
ItemsSource="{Binding Source={StaticResource dso}}"
/>


4. 利用HierarchicalDataTemplate 來延伸裡面的定義
ex. <HierarchicalDataTemplate
DataType="{x:Type src:League}"
ItemsSource="{Binding Path=Divisions}"
>
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>


5. 同一資源 也可以用不同的地方引用 如 MenuItem


#22 XPS 文件處理



1. XPS 格式 一種文件交換格式,由MS所定義
支援的package :
System.IO.Packaging
System.Windows.Xps.Packaging

2. 除code引用之外,若系統已有支援XPS,則可以使用列印的方式產生

3. Office"12" Open XML Formats 也可以

4. 所有這種格式其實都是一個zip檔,改副檔名為zip後就可以解壓縮

5. 也可以自行定義

6. 在程式中可以用 doncument view 存放xps文件
7. 加入 ReachFramwork 元件 參考, 就可以使用XpsDocument 的物件,在用documentViewer1轉換後才可以在畫面上使用
ex. XpsDocument doc = new XpsDocument(@"C:\demo.xps", FileAccess.Read);
FixedDocumentSequence fds = doc.GetFixedDocumentSequence();
documentViewer1.Document = fds;


8. 呼叫列印對話方塊列印檔案
宣告 PrintDialog,
ex. PrintDialog pd = new PrintDialog();
// 設定列印範圍
pd.PageRangeSelection = PageRangeSelection.AllPages;
// 設定可否改變視窗大小
pd.UserPageRangeEnabled = true;

列印檔案
ex.
XpsDocument doc = new XpsDocument(@"C:\demo.xps", FileAccess.Read);
FixedDocumentSequence fds = doc.GetFixedDocumentSequence();
/// pd.PrintDocument(檔案序列,說明)
pd.PrintDocument(fds.DocumentPaginator, "Demo #1");


9. 加入 system.printing
code
/// 宣告 LocalPrintServer
LocalPrintServer lps = new LocalPrintServer();
/// 宣告 列印序列
PrintQueue pq = lps.DefaultPrintQueue;
/// 加入列印序列 pq.AddJob(序列名稱,檔案位置,是否進行多工緩衝處理)
pq.AddJob("Demo #1", @"C:\demo.xps", false);



# 23 3D 繪圖 #1 – 3D 繪圖概念與 3D WPF 組成元件

1. WPF 要顯示3D 的話要使用 Viewport3D 標籤

2. 元件: 模型、攝影機、光源

3. PerspectiveCamera Position 標籤:
設定
a. Position, 三維作標
b. LookDirection 攝影機的方向
c. UpDirection 法向量, 0,1,0 正常、0,-1,0 上下相反

4. 光源
a. AmbientLight(環繞光源), ex.室內
b. DirectionalLight(方向性光源) ex. 陽光照射
c. PointLight(點光源) ex. 蠟燭光
d. SpotLight(聚光燈光源) ex. 聚光燈

5. Demo 是 y 軸在旋轉

6. 在 ModelVisual3D 設定 模型內容、光源

7. 其他範例, 材質設定、光源設定


#24 3D 繪圖 #2 – 3D 模型顯示與處理

1. 在 Viewport3D 定義
模型 、光源 : ModelVisual3D 元素
攝影機 camera: Viewport3D.Camera


2. MeshGeometry3D 建立 3D 模型

3. GeometryModel3D.Material 定義圖案顏色

4. 模型是在原點 0,0,0

2010年7月9日 星期五

創新思考

基本上看看1~10頁就ok了,由於上課的時候這個題目太大,還沒整理的很好!


2010年7月7日 星期三

會議管理與執行

2010年7月6日 星期二

C#服務重新啟動

在 window 有 很多 Service, 我們可以在 控制台->系統管理工具->服務 中 來設定他的狀態。

若想要從程式端來設定服務, C# 也有提供這種功能

舉例來說 MSDN 上的 smaple code 就是 開啟 Alerter 這個服務



// Check whether the Alerter service is started.

ServiceController sc = new ServiceController();
sc.ServiceName = "Alerter";
Console.WriteLine("The Alerter service status is currently set to {0}",
sc.Status.ToString());

if (sc.Status == ServiceControllerStatus.Stopped)
{
// Start the service if the current status is stopped.

Console.WriteLine("Starting the Alerter service...");
try
{
// Start the service, and wait until its status is "Running".
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running);

// Display the current service status.
Console.WriteLine("The Alerter service status is now set to {0}.",
sc.Status.ToString());
}
catch (InvalidOperationException)
{
Console.WriteLine("Could not start the Alerter service.");
}
}



參考網址 MSDN- Service Start
參考網址 MSDN- Service controler 類別



下面補充 重新啟動 service 的 sample

http://www.csharp-examples.net/restart-windows-service/


雖然這裡範例是有將 stop service 和 start service 放在同一個 function 執行
但 在我撰寫的平台中 會 無法正常 達到重新啟動的效果, 原因是 將 service stop 後 放入 StopPending 但還沒 真正 stop ,
若強行 使用WaitForStatus 到真正結束 會出現 timeout 的 例外
但接者呼叫 start service 會出現 InvalidOperationException 的例外


所以 我使用的方法是將 stop service 和 start service 分別在不同函式呼叫避免掉這個問題