轉錄自 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 屬性
2010年7月26日 星期一
System.Net.Mail.Attachment 附件含有中文所遇到的錯誤
標籤:
C sharp
詳細的狀況是這樣:
利用 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
利用 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
標籤:
C sharp
看完 微軟所提供的教學影片 所紀錄下來的心得摘要
網址
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
網址
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月6日 星期二
C#服務重新啟動
標籤:
C sharp
在 window 有 很多 Service, 我們可以在 控制台->系統管理工具->服務 中 來設定他的狀態。
若想要從程式端來設定服務, C# 也有提供這種功能
舉例來說 MSDN 上的 smaple code 就是 開啟 Alerter 這個服務
參考網址 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 分別在不同函式呼叫避免掉這個問題
若想要從程式端來設定服務, 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 分別在不同函式呼叫避免掉這個問題
訂閱:
文章 (Atom)