Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9312

Autodesk Inventor API Hacking (WPFのWindowを表示)

$
0
0

0. はじめに

Freeradicalの中の人、yamarahです。
いつまでもWinFormsではつらいので、WPFを使おうという話しです。
WPF自体については解説しません。Formの代わりにWPFのWindowを表示するには、どうすれば良いのかを説明します。

1. ProjectにWPFを追加するための準備

Visual Studio → ソリューション エクスプローラーで右クリック → 追加新しい項目で'WPF'が無い場合があります。
AddWPF.PNG
上の画像にはWPFがありますが、もし見当たらない場合は、ProjectでUseWPFtrueにします。
これで、新しい項目の追加WPFが表示されるはずです。
また、実際にWPFのWindowを追加した後に、

Windows デスクトップ アプリケーションを作成するには、Microsoft.NET.Sdk.WindowsDesktop が必要です。現在の SDK では、'UseWpf' と 'UseWindowsForms' はサポートされていません。

と警告が出る場合があります。この場合は、警告に従って、Projectの1行目を

<ProjectSdk="Microsoft.NET.Sdk.WindowsDesktop">

に変更しましょう。
これらの変更を施したProjectの冒頭部分は、このようになると思います。

<ProjectSdk="Microsoft.NET.Sdk.WindowsDesktop"><PropertyGroup><OutputType>Library</OutputType><TargetFramework>net472</TargetFramework><UseWPF>true</UseWPF><RootNamespace>InvAddIn</RootNamespace><LangVersion>8.0</LangVersion><Nullable>enable</Nullable></PropertyGroup>

以前の記事(C#8.0、そして.NET Core3.0)に従って、nullableも有効にしています。

2. 実際に表示する

表示するだけなら、単純に

varwpfWindow=newWindow1();wpfWindow.ShowDialog();// modalの場合// wpfWindow.Show();       // modelessの場合

とすれば、表示されます。しかし、これだけだと、WinFormsについて書いた以前の記事(Modeless FormのZ order)と同じ問題が発生して、WindowがInventorの後ろに隠れうる状態です。
WPFでは、WinFormsの場合と違って、modalでもInventorの後ろに回ります。
解決策は、modelessなWinFormsと同じように親子関係の設定をする必要があり、WPFでは次のようにします。

varwpfWindow=newWindow1();// Window Handleを操作するためのHelpervarhelper=newSystem.Windows.Interop.WindowInteropHelper(wpfWindow);// 親を設定するhelper.Owner=newSystem.IntPtr(InventorApplication.MainFrameHWND);// 表示するwpfWindow.ShowDialog();// modalの場合// wpfWindow.Show();       // modelessの場合

99. 親の記事に戻る

Autodesk Inventor API Hacking (概略)


Viewing all articles
Browse latest Browse all 9312

Latest Images

Trending Articles