Microsoft.TeamFoundation.MVVM 名前空間の利用について

こんにちは、Visual Studio サポート チームです。 今回は、Team Foundation の拡張開発で利用可能な Microsoft.TeamFoundation.MVVM 名前空間について、モジュールの配布に関する注意事項とあわせてご紹介します。   Microsoft.TeamFoundation.MVVM 名前空間は、Team Foundation Server のクライアント プログラムを拡張する API のセットとして、Visual Studio、または、チーム エクスプローラーに同梱される形で提供されています。 Team Foundation の拡張と Microsoft.TeamFoundation.MVVM 名前空間の詳細につきましては、以下のドキュメントを参照してください。   Team Foundation の拡張https://msdn.microsoft.com/ja-jp/library/bb130146.aspx Microsoft.TeamFoundation.MVVM 名前空間https://msdn.microsoft.com/ja-jp/library/microsoft.teamfoundation.mvvm.aspx   ご注意 本名前空間は .NET Framework には含まれておらず、DLL 単体での再配布も許諾されておりません。このため、本名前空間を利用するアプリケーションは Visual Studio やチーム エクスプローラーがインストールされた環境でのみご利用いただけるものとなりますのでご注意ください。   MVVM に関する参考情報 MVVM パターンの雛形として Microsoft.TeamFoundation.MVVM を利用したいという要望をお寄せいただくことがありますが、前述の通り Visual Studio やチーム エクスプローラーをインストールされていない環境では Microsoft.TeamFoundation.MVVM 名前空間をご利用いただくことはできません。ご不便をおかけし申し訳ありませんが、何卒、ご了承くださいますようお願い申し上げます。…


フォントファミリーとタイプフェースの指定

こんにちは、Visual Studio サポート チームです。 今回はフォントについてのお話です。 期待したデザインで文字をレンダリング (表示や印刷) するためには、適切なフォントファミリーとタイプフェース(書体)を指定することが重要です。 以下では、フォントファミリーとタイプフェースの指定で押さえておきたいポイントについて紹介したいと思います。   フォントファミリーとタイプフェースについて 多くのフォントファミリーでは、標準・ボールド・イタリック・ボールドイタリックの 4 種類のタイプフェースが組み込まれています。 しかし、タイプフェースの種類は、必ずしも、この 4 種類だけとは限らず、その他の種類が含まれる場合があり、Windows のフォントでもタイプフェースは多様化しています。 WPFなどのアプリケーション開発では、このような多様化したタイプフェースに対しては、FamilyTypeface クラスで適切な値を指定する必要があります。タイプフェースの種類が多い Arial で具体例を説明します。   Arialの例 まず、エクスプローラーでフォントフォルダー (%WINDIR%\Fonts) をオープンし、 “Arial” をダブルクリックして見ていただくと以下のタイプフェースが列挙されます。      Arial のタイプフェース やや狭い やや狭い斜体 やや狭い太字 やや狭い太字 太字 極太 斜体 太字 太字 太字 標準 標準的なタイプフェースの4 種類のみで考えてしまうと “やや狭い” を “Arial Narrow” というフォント ファミリーで指定したり、”極太” を “Arial Black” というフォントファミリーで指定しがちですが、実際には…


WPF アプリケーションの起動時に System.Windows.Automation.Peers.AutomationPeer.Initialize() で System.NullReferenceException が発生する場合がある。

  こんにちは、Visual Studio サポート チームです。 今回は、特定の環境下で WPF アプリケーションの起動に失敗する現象についてお知らせいたします。 現象 特定の環境において WPF アプリケーションの起動に失敗する場合がある。 その際、以下のようなエラーが記録される。 System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 System.Windows.Automation.Peers.AutomationPeer.Initialize() 場所 System.Windows.Automation.Peers.AutomationPeer..ctor() 場所 System.Windows.Automation.Peers.UIElementAutomationPeer..ctor(UIElement owner) 場所 System.Windows.Automation.Peers.FrameworkElementAutomationPeer..ctor(FrameworkElement owner) …   原因 本問題は、WPF の不具合に起因して発生します。 WPF アプリケーションのウィンドウ表示時の初期化処理で、static な ValuePatternIdentifiers クラスを使用する際、タイプイニシャライザによる初期化が開始されて ValuePatternIdentifiers クラス の各 static メンバが null 初期化されます。(初期化処理 A とします) このタイプ イニシャライザの処理の中で、COM の初期化処理 (CoCreateInstance) が WM_GETOBJECT メッセージの送信を伴って実行されますが、ここで、WM_GETOBJECT メッセージが WPF の…


WPF アプリケーションにおける XPS ドキュメントの印刷方法

こんにちは、Visual Studio サポート チームです。 今回は、XPS (XML Paper Specification) ドキュメントの印刷方法のひとつをご紹介します。 WPF アプリケーションから XPS ドキュメントを印刷すると、Windows の XPS Viewer ツールで印刷した場合に比べて印刷結果が異なるケースがあることをご存知でしょうか。 実は XPS Viewer ツール内部では、WPF のクラスではなく Win32 の StartXpsPrintJob API を使用して、XPS ドキュメントの印刷を行っています。 WPF と Win32 API では、XPS ドキュメントを印刷する際の内部ロジックやフォントの描画時に参照するキャッシュが異なるため、XPS ドキュメントの構造やフォントキャッシュの状態によっては、印刷結果に若干の違いが生じるケースがあるのです。 WPF アプリケーションから印刷した結果よりも、XPS Viewer ツールから印刷した結果の方が望ましい場合には、思い切って Win32 API を使用するというのもひとつの方法かと思います。 もしも「WPF アプリケーションから Win32 API を呼び出すとなると、プラットフォーム呼び出しが必要になるし、何だか面倒だなあ・・・」という場合には、下記の方法を是非お試しください!   WPF アプリケーションから、Win32 API を使用して XPS ドキュメントを印刷する方法 XPS…


WPF アプリケーションの画面表示が不正になる件について

こんにちは、Visual Studio サポート チームです。 今回は、WPF アプリケーションでの画面が正しく表示されない問題の切り分け方についてご紹介します。 WPF アプリケーションでは、画面が真っ白になる等、不正な表示になることが稀にあるというお問い合わせをいただくことがあります。 そのような問題は、現象を再現させるための手順が定まっていなかったり、特定の PC でしか問題を確認できなかったりすることがあります。 そのため、まずは問題が、ハードウェア (ビデオ ドライバー) にあるのか、ソフトウェアにあるのかの切り分けを行います。 WPF アプリケーションは、ウィンドウやコントロールの描画を行う際に、既定では、グラフィックス ハードウェアの機能を利用します。 グラフィックス ハードウェアを利用することによって、描画のパフォーマンスの向上が期待できます。 しかしながら、この機能は、ハードウェアに依存するため、描画が正しく行われない等の問題を引き起こす場合が稀にあります。 そのような場合には、グラフィックス ハードウェアの機能を無効にすることで問題を回避できることがあります。 グラフィックス ハードウェアの機能を無効にする手順は、以下となります。   [スタート] – [ファイル名を指定して実行] に regedit と入力し、[OK] をクリックします。  レジストリ エディターが開きますので、左ペインから以下のパスを作成します。     HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics 上記パス上で右クリックし、[新規] から [DWORD 値] を選択し、以下の値を作成します。     値の名前: DisableHWAcceleration 値の種類: REG_DWORD 値のデータ: 1 アプリケーションを再起動します。   このレジストリの情報は以下の技術情報に公開されていますので、さらに詳細を知りたい場合はご確認ください。     グラフィックス レンダリングのレジストリ設定…


WPF アプリケーションでのクリックイベントについて

こんにちは、Visual Studio サポート チームです。 今回は、WPF アプリケーションでのクリック イベントについてご紹介します。 Win32 アプリケーションや WinForms アプリケーションでタッチ イベントを処理する場合、WM_TOUCH メッセージを処理します。 しかし、WPF アプリケーションでは、WPF ランタイム内で独自にタッチ メッセージを処理しているので、WM_TOUCH は無効になっており、独自に TouchDown などのイベントを呼び出しています。 そのため、何か問題が発生したときに、WPF アプリケーションだけタッチできないといったご質問をいただくことがあります。 このような場合には、以下のドキュメントに従い、WPF の独自処理を無効にすることで問題を回避できる場合があります。   WPF アプリケーションのリアルタイムなスタイラス入力を無効にする <http://msdn.microsoft.com/ja-jp/library/vstudio/ee230087.aspx> 上記の対応方法を適用した場合には、独自の処理が無効になり、TouchDown のタッチやスタイラスに関するイベントは呼ばれなくなりますが、WM_TOUCH メッセージは有効となります。 このような制限はありますが、アプリケーションの実装次第で問題を解決できる可能性がありますので、ボタンをクリックしても反応しないというような問題が発生した場合には、せひ一度お試しいただくことをお勧めします。 [補足] リアルタイムなスタイラス入力を無効にするためのサンプル プログラムは既に公開されていますが、有効にする方法についてはありませんでした。 そのため、参考に有効/無効を切り替えるためのサンプル プログラムを以下に公開します。 ———-     private ObservableCollection<TabletDevice> tabletDevicesObservable = new ObservableCollection<TabletDevice>();     public void UpdateWPFTabletSupport(bool enabled)     { // InputManager のタイプの取得…


Windows 8、Windows 8.1 におけるタッチ キーボードと IME に関する制限事項

こんにちは、Visual Studio サポートチームです。 今回は、Windows 8、Windows 8.1 におけるタッチ キーボードと IME に関する制限事項についてご紹介します。 弊社 OS 標準 IME である Microsoft IME (以降、MS IME) 以外にも様々なサードパーティ製の IME がありますね。用途に応じて、MS IME とサード パーティ製 IME とを、使い分けている方も多いのではないでしょうか。 実は、タッチ キーボードと IME の組み合わせによっては、予期せぬ入力動作となる場合があります。現時点では、下記二つの動作を確認しています。 1. WPF アプリケーションにおいて、英数字キー以外の入力が IME に通知されない 2. Shift キーのダブル クリックによる Shift ロックができない これらの現象はサード パーティ製の IME を使用しているときに発生し、MS IME を使用しているときは発生しません。 それぞれの現象についてご説明します。 ————————————————————————————– 1. WPF アプリケーション上において、英数字キー以外の入力が IME に通知されない…