Visual Studio 2010ではスタートページをカスタマイズできます。また、スタートページ自体もXAMLファイルで記述されているため、背景に好きな絵を表示するなども簡単にできます。
カスタムスタートページ
問題は表示する背景画像を切り替えるときにXAMLファイルを毎回編集しなければならない点ですが、XAMLファイルに背景画像を記述するのではなく、WPFユーザコントロールとして定義ファイルから画像を表示するコントロールを作成してそれを背景画像として表示するようにStartPage.xamlファイルを編集すれば画像変更するたびにStartPage.xaml編集する必要はなくなります。
また、定義ファイルへ画像ファイル名を設定するButtonをWPFカスタムコントロールとして定義してそれをカスタムスタートページに配置すれば画像の切り替えも実現できます。
カスタムスタートページからDLLを使う方法はカスタマイズの一環として想定されているようで、カスタムスタートページで使うDLLは以下のフォルダに配置するように規定されています。
C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\StartPageAssemblies
ここにカスタムスタートページで使用する画像表示用WPFユーザコントロールと画像選択用WPFカスタムコントロールを含んだDLLファイルを配置します。
画像表示用WPFユーザコントロール
Public Class ItaBackgroundImage
Private Sub Me_Loaded(ByVal sender As Object,
ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Call LoadImage()
End Sub
Public Sub LoadImage()
Dim userDocumentFolder As String = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)
Dim configFilename As String = System.IO.Path.Combine(userDocumentFolder,
"ItaBackgroundImage.config")
Dim imageFilename As String = String.Empty
Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(String))
If System.IO.File.Exists(configFilename) Then
Using _fs As New IO.FileStream(configFilename, IO.FileMode.Open)
imageFilename = CType(serializer.Deserialize(_fs), String)
_fs.Close()
End Using
If Not System.IO.File.Exists(imageFilename) Then
imageFilename = String.Empty
End If
End If
If imageFilename.Length > 0 Then
Me.Image1.Source = New Imaging.BitmapImage(New System.Uri(imageFilename,
System.UriKind.Absolute))
End If
End Sub
End Class
XAMLファイルの定義は次のようになっています。
画像選択用WPFカスタムコントロール
Public Class ItaBackgroundImageSetup
Inherits Button
Shared Sub New()
'この OverrideMetadata 呼び出しは、この要素が基本クラスと異なるスタイルを提供することをシステムに通知します。
'このスタイルは themes\generic.xaml に定義されています
DefaultStyleKeyProperty.OverrideMetadata(GetType(ItaBackgroundImageSetup),
New FrameworkPropertyMetadata(GetType(Button)))
End Sub
Private Sub Me_Click(ByVal sender As Object,
ByVal e As System.Windows.RoutedEventArgs) Handles Me.Click
Dim userDocumentFolder As String = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)
Dim configFilename As String = System.IO.Path.Combine(userDocumentFolder,
"ItaBackgroundImage.config")
Dim imageFilename As String = String.Empty
Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(String))
If imageFilename.Length = 0 Then
imageFilename = GetImageFilename(System.Environment.GetFolderPath(Environment.SpecialFolder.MyPictures))
If imageFilename.Length > 0 Then
Using _fs As New IO.FileStream(configFilename, IO.FileMode.Create)
serializer.Serialize(_fs, imageFilename)
_fs.Close()
End Using
End If
End If
'If imageFilename.Length > 0 Then
'CType(CType(sender, Button).DataContext, NotifyImageChange).Source =
'New Imaging.BitmapImage(New System.Uri(imageFilename, System.UriKind.Absolute))
'End If
If imageFilename.Length > 0 Then
MessageBox.Show("Startpageの背景画像はVisual Studioを再起動すると反映されます。")
End If
End Sub
Private Function GetImageFilename(ByVal folderName As String) As String
Dim result As String = String.Empty
Dim dlg As New Microsoft.Win32.OpenFileDialog
dlg.CheckFileExists = True
dlg.InitialDirectory = folderName
dlg.FileName = "*.jpg"
dlg.DefaultExt = ".jpg"
dlg.Filter = "JPEG (.jpg)|*.jpg|PNG (.png)|*.png"
dlg.RestoreDirectory = True
dlg.Title = "テキストエディタの背景に設定する画像を選択してください。"
If dlg.ShowDialog Then
result = dlg.FileName
End If
Return result
End Function
Private Sub ItaBackgroundImageSetup_Loaded(ByVal sender As Object,
ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Me.Content = "Setup BackgroundImage..."
End Sub
End Class
配布とインストール
VSIXで配布できるとMSDNライブラリに書いてあるようですがうまくいかないのでbatファイルにて設定することにしました。
batファイルを使った方法でつまずいたのは次の2点でした。
- カスタムスタートページ用DLLの配置フォルダの作成は管理者権限が必要
- batファイルを管理者として実行するとカレントフォルダがc:\windows\system32になってしまう。
MSDNライブラリに書かれているbatファイルの例ではこのあたりの考慮がされていないので、以下のように変更しました。
@echo off
cd /d %~dp0
If not exist "%VS100COMNTOOLS%\*.*" goto ERROR
Set SPages=%USERPROFILE%\Documents\Visual Studio 2010\StartPages
Set SPAssemblies=%VS100COMNTOOLS%..\IDE\StartPageAssemblies
Xcopy StartPage.xaml "%SPages%\"
If not exist "%SPAssemblies%" MD "%SPAssemblies%"
If not exist "%SPAssemblies%" goto :MKDIRERR
Xcopy ItaStartPage.dll "%SPAssemblies%\"
Echo Custom Start Page Installed.
Echo Please go to Tools^>Options^>Environment^>Startup in Visual
Echo Studio and select Documents\Visual Studio 2010\StartPages\StartPage.xaml
Echo from the Customize Start Page dropdown list.
Goto END
:ERROR
Echo Error: Visual Studio 10 installation not found.
Goto END
:MKDIRERR
Echo Error: Can't Make dir "%SPAssemblies%"
:END
PAUSE
このbatファイル、StartPage.xamlファイル、ItaStartPage.dllファイルを同じフォルダにいれてbatファイルを右クリックして「管理者として実行」すると次のような実行結果になります。
batファイルの実行が終わったら、Visual Studioの[ツール]‐[オプション]メニューでカスタムスタートページを使用するように設定します。
なお、現時点では[Setup BackgroundImage]ボタンをクリックしてもすぐに画像が切り替わらずVisual Studioの再起動が必要です。そのうち何とかしたいですね。
なお、ここで設定した画像設定は、痛IDE Ver.1.2以降であればテキストエディタの背景としても表示できます。
ダウンロード
Visual Studio Galleryからダウンロードできます。
http://visualstudiogallery.msdn.microsoft.com/ja-jp/395c4cc0-0fb2-456a-8def-5e01d241e8da