[Visual Studio][Blend] 自訂WPF、Silverlight專案樣版

有在玩WPF或是Silverlight的朋友應該會發現,如果使用Visual Studio和Blend來建立專案的話,得到的預設樣版會有些地方不太一樣。
仔細看的話,會發現用Blend建立的MainPage.xaml少引用一個Namespace,所以也沒有DesignWidth和DesignHeight這兩個設定值。 看起來似乎是小事,用Visual Studio建立不就好了嗎?或是用Blend建立再複製貼上啊…


有在玩WPF或是Silverlight的朋友應該會發現,如果使用Visual Studio和Blend來建立專案的話,得到的預設樣版會有些地方不太一樣;舉例來說,用Visual Studio開啟的Silverlight Application和用Blend建立的Silverlight Application,裡面的MainPage.xaml會分別長成下面的樣子:

用Visual Studio建立的MainPage.xaml為

MainPage.xaml
<UserControl x:Class="SilverlightApplication.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
 
    <Grid x:Name="LayoutRoot" Background="White">
 
    </Grid>
</UserControl>

 

用Blend建立的MainPage.xaml為

MainPage.xaml
<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SilverlightApplication2.MainPage"
    Width="640" Height="480">
 
    <Grid x:Name="LayoutRoot" Background="White"/>
</UserControl>

 

仔細看的話,會發現用Blend建立的MainPage.xaml少引用一個Namespace,所以也沒有DesignWidth和DesignHeight這兩個設定值。 看起來似乎是小事,用Visual Studio建立不就好了嗎?或是用Blend建立再複製貼上啊… 嗯,以上的方法固然可行,但是有個一勞永逸的方法可以解決這個問題--只要去修改Visual Studio和Blend專案的樣版就行了!!
怎麼個改法呢?

  • 請先找到你要改的工具安裝的路徑

Blend預設安裝路徑為C:\Program Files\Microsoft Expression\Blend 4\

Visual Studio預設安裝路徑為C:\Program Files\Microsoft Visual Studio 10.0\
如果是64位元作業系統請把C:\Program Files改為C:\Program Files (x86)
  • 再來找到樣版的資料夾
Blend的SilverlightApplication樣版路徑為ProjectTemplates\en\CSharp\Silverlight\Application;SilverligthApplication+Web的樣版路徑為ProjectTemplates\en\CSharp\Silverlight\Website (中文版的話需把en改成zh-Hant)
Visual Studio的樣版路徑為Common7\IDE\ProjectTemplatesCache\CSharp\Silverlight\1033
  • 打開壓縮檔裡面的MainPage.xaml並進行修改

Blend的MainPage.xaml原來長這樣

MainPage.xaml
<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="$safeprojectname$.MainPage"
    Width="640" Height="480">
 
    <Grid x:Name="LayoutRoot" Background="White"/>
</UserControl>

Visual Studio的樣版原來長這樣(Visual Studio的樣版檔名為Page.xaml)

MainPage.xaml
<UserControl x:Class="$safeprojectname$.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
 
    <Grid x:Name="LayoutRoot" Background="White">
 
    </Grid>
</UserControl>
  • 把修改完畢的檔案存回壓縮檔就大功告成啦!!想要以後的專案預設樣版長怎樣呢?可以開始想想囉!!
附上我個人習慣使用的樣版,請笑納:
MainPage,xaml
<UserControl x:Class="$safeprojectname$.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignWidth="800" d:DesignHeight="600"
    Width="Auto" Height="Auto">
 
    <Grid x:Name="LayoutRoot" Background="Transparent">
 
    </Grid>
</UserControl>

只要把Blend和Visual Studio的樣版內容改成一樣的,就不會有用不同工具建立專案,初始的內容會不一致的情形了(WPF也可以這樣處理)。不過,其實樣版的用途可不只這樣而已喔,有興趣的話,也是可以自製專案樣版,專案要引用的Library和預設的檔案或是資料夾結構,都可以利用樣版的設定,在建立專案時就建立好所有的東西喔!!