none
WPF で ツールボックスにMedia Playerを追加したい RRS feed

  • 質問

  •  IDE : visual studio 2015 community を使用
     WPFでWindows Media Playerを使いたく思っていますが、ツールボックスに追加できない状態です。

    下記が現在までの状況です。

       下記の工程でツールボックスにMedia Playerの追加を試みています。
       1.第1ステップ
          -1.ツールボックスで右クリック、アイテムの選択、「COMコンポーネント」のタブをClick
          -2.○にクルクルの表示が出たまま5分ほど待つも変化なし
             https://social.msdn.microsoft.com/Forums/ja-JP/04ab110a-cfcc-46d5-95ee-5cd7a85f064f/com?forum=vsgeneralja
             の症状に似ていますが、VS が落ちるまではいかない
          -3.ここの質問サイトの解答にあるSystem32のwmp.dll(下記) をドラッグしてのCOM コンポーネントの追加を実施
                 wmp.dll (ファイルバージョン 12.0.16299.402 )
          -4.操作は完了するも、下記のメッセージが出て、追加されていない。
             **********
        次のコントロールはツールボックスへ正常に追加されましたが、アクティブなデザイナーで有効になっていません
      Windows Media Player
      追加するコントロールに、現在のデザイナーおよび.NET Frameworkのバージョンとの互換性があること確認してください。
             **********

     

          5. デザイナーの状況
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
            xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
            xmlns:l="http://schemas.livet-mvvm.net/2011/wpf"

          

       2.第2ステップ
         -1.Projectのpropertyから、フレームワークが  .NET Freamwork 4.5 であったので、
           一番新しそうな、 .NET Freamwork 4.6.1 に変更
         -2.VS再起動し、先ほどと同じ操作でツールボックスにドラッグ・ドロップ 注意画面等は現れない。
         -3.ツールボックスのすべてのWPFコントロールに、Windows Media Player が追加されている。が 薄字 になっている。
         -4.一応ドラッグはできるが、つかむと、赤丸の斜線のマークが出て、ドラッグドロップはできない。
         -5.Windows Media Playerの項目にカーソルを寄せると下記の表示が出る。
           ************
      Windows Media Player
      バージョン 1.0(Microsoft Corporationから)
      COM コンポーネント
           ************

      で、行き詰っています。解決策有ればご教授ください。 

       
    2018年6月2日 2:47

回答

  • WindowsMediaPlayerはWPFに直接配置することができないために「現在のデザイナー~」のメッセージがでます。

    ツールボックスを右クリックして、「すべて表示」を選択してみてください。ツールボックス自体には追加さているが灰色になっていて選択できない状態になっているはずです。

    WindowsMediaPlayerなどのコントロールはWindowFormのコントロールとして存在しているため、WPFには直接配置することができないためです。
    でもそれでは困るので、いったんWindowsFormsHostというWPF上にWindowsFormsコントロールを配置するためのコントロールを使うと間接的に配置できるようになります。

    WPFにWindowsMediaPlayerを配置するには以下のような手順になります。

    1. ソリューションエクスプローラーのプロジェクトを右クリックして、追加->新しい項目->Windows Forms->ユーザーコントロール(WPFがついていないほう)を作成します。
    2. WindowsFormsのユーザーコントロールのデザイナがアクティブな状態であればツールバーのWindowsMediaPlayerは有効になっているので貼り付けます。
    3. ここまででいったんプロジェクトをビルドします。
    4. WPFのウィンドウのデザイナに戻って、ツールボックスからWindowFormsHostというコントロールを貼り付けます。
    5. 張り付けたWindowsFormsHostを選択した状態で、プロパティウィンドウのChildプロパティに新規作成というボタンがあるのでクリックします。
    6. 表示されるウィンドウのツリーにAxWindowsMediaPlayerという項目が出てくるので、それを選んでOKします。(作ったUserControlでもいいです)
    7. WindowsFormsHostにAxWMPLib:AxWindowsMediaPlayerが張り付けられます。
    8. さいどビルドしてじっこうするとウィンドウにWMPが張り付いているのが確認できます。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク エンバー 2018年6月6日 4:50
    2018年6月2日 4:28
  • メニューがない、D&D に対応していないのはそんなものです。アプリケーションの開発者がメニューの有無を含めて自由に作れるようにするためです。

    必要なところは自分で追加し、コントロールのメソッドやプロパティにつないでください。

    2018年6月6日 3:36

すべての返信

  • WindowsMediaPlayerはWPFに直接配置することができないために「現在のデザイナー~」のメッセージがでます。

    ツールボックスを右クリックして、「すべて表示」を選択してみてください。ツールボックス自体には追加さているが灰色になっていて選択できない状態になっているはずです。

    WindowsMediaPlayerなどのコントロールはWindowFormのコントロールとして存在しているため、WPFには直接配置することができないためです。
    でもそれでは困るので、いったんWindowsFormsHostというWPF上にWindowsFormsコントロールを配置するためのコントロールを使うと間接的に配置できるようになります。

    WPFにWindowsMediaPlayerを配置するには以下のような手順になります。

    1. ソリューションエクスプローラーのプロジェクトを右クリックして、追加->新しい項目->Windows Forms->ユーザーコントロール(WPFがついていないほう)を作成します。
    2. WindowsFormsのユーザーコントロールのデザイナがアクティブな状態であればツールバーのWindowsMediaPlayerは有効になっているので貼り付けます。
    3. ここまででいったんプロジェクトをビルドします。
    4. WPFのウィンドウのデザイナに戻って、ツールボックスからWindowFormsHostというコントロールを貼り付けます。
    5. 張り付けたWindowsFormsHostを選択した状態で、プロパティウィンドウのChildプロパティに新規作成というボタンがあるのでクリックします。
    6. 表示されるウィンドウのツリーにAxWindowsMediaPlayerという項目が出てくるので、それを選んでOKします。(作ったUserControlでもいいです)
    7. WindowsFormsHostにAxWMPLib:AxWindowsMediaPlayerが張り付けられます。
    8. さいどビルドしてじっこうするとウィンドウにWMPが張り付いているのが確認できます。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク エンバー 2018年6月6日 4:50
    2018年6月2日 4:28
  •  gekka 様、回答ありがとうございます。
     完成しません。

     5番までは、記載通り、実行できましたが、
     6番の AxWindowsMediaPlayer という項目が表示されません。

     windowのtreeの状態を別途送信します。

    -------------

    この文と一緒に図も送る方法がわかりません

    図の挿入をクリックして、画像を貼りつけると、画像だけになってしまうので???

    -----------

    2018年6月2日 5:53
  • 当方、ポイント 0 なので、画像送れませんでした。

    なお、xamlの状況は

        <Grid>
            <WindowsFormsHost HorizontalAlignment="Left" Height="100" Margin="268,162,0,0" VerticalAlignment="Top" Width="100"/>
        </Grid>

    です。

    2018年6月2日 6:08
  •  5番までは、記載通り、実行できましたが、
     6番の AxWindowsMediaPlayer という項目が表示されません。

    「作ったUserControlでもいいです」とも書かれていましたが、それも出てこない状態ですか?

    画像が貼れない件については、こちら を確認してください。


    2018年6月3日 6:22
  • Azulean様

    応答ありがとうございます。

    作ったUserControl も表示されません。

    図の右側の部分の赤枠で表示された部分は、こちらで試行したときと同じ画面です。

    図の左側の部分のTreeの部分も外観は同じですが、

    top は WindowsFormsIntegration

    childは、System.Windows.Forms.integration

    その配下に ElementHost が一つだけあります。

    rootには、もう一つ、Systems.Windows.Forms があります。

    child は Systems.Windows.Forms でその配下は

       BindingNavigator,Button,CheckBox,CheckListBox,ComboBox,ContainerControl,ContexMenuStrip,Control,DataGrid

    以下2,30ありますが、省略して、最下部の5個をあげると、TrackBar,TreeView,UserControl,VscrollBar,WebBrowser

    です。

    ーーーー

    ポイントの方ですが、申請して18時間ほど経ちましたが、まだ付加されていません。ので画像送れません。ご容赦ください。

    2018年6月4日 1:24
  • 要するに、以下のような状態ですよね?

    これは、gekka さんの手順で言うところの3番のビルドが行われていないときの表示です。
    一度、ビルドをやり直してみて、再度、ダイアログを開いてみませんか?

    または、ビルドがエラーになっているなど、別の問題が起きていませんか?
    このダイアログにコントロールが表示されるためには、そのコントロールが含まれているプロジェクトのビルドが成功することが条件になります。

    2018年6月4日 14:08
  • Azuleanさま、応答ありがとうございます。

    1.Childの新規作成のときの図は、Azulean さんが貼り付けた図と同じです。

    2.3番のビルドの結果は、下記となります。

    ========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========


    ただし、この前に、下記が記載されています。

    1>------ すべてのリビルド開始: プロジェクト:WindowsFormsApplication1, 構成:Debug ny CPU ------
    1>  COM 参照 'WMPLib' は ActiveX コントロール 'AxWMPLib' の相互運用アセンブリですが、コンパイラによって /link フラグでリンクされるように設定されています。この COM 参照は参照として処理され、リンクされません。
    1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(2399,5): warning MSB3305: COM 参照 "WMPLib" をパス "C:\WINDOWS\system32\wmp.dll" から処理しています。プロパティ get アクセス操作子 'sessionPlaylistCount' (有効な戻り値の型のない型 'WMPLib.IWMPNowPlayingHelperDispatch' 上) がタイプ ライブラリ インポーターで見つかりました。  インポーターはこのプロパティをメソッドとしてインポートすることを試行します。
    1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(2399,5): warning MSB3305: COM 参照 "WMPLib" をパス "C:\WINDOWS\system32\wmp.dll" から処理しています。'IWMPGraphEventHandler.NotifyAcquireCredentials' の引数のうち少なくとも 1 つをランタイム マーシャラーでマーシャリングできません。  したがってこのような引数はポインターとして渡され、アンセーフ コードの使用が必要になります。
    1>  WindowsFormsApplication1 -> D:\Users\___\Visual Studio 2015\Projects\____\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe

    2018年6月5日 9:14
  • WindowsFormsApplication1 となっているのが気にかかりますが、どのような構成をされているのですか?

    gekka さんの手順は、WPF アプリケーション(か、そのクラスライブラリ)に Windows Forms のユーザーコントロールを足すことです。
    決して、「Windows Forms アプリケーション」を作る手順ではありません。

    2018年6月5日 12:17
  • Azuleanさま、応答ありがとうございます。

     Media Player を wpf 上に貼り付けることができました。

    ご指摘のように、「Windows Forms アプリケーション」 を作っていました。

    ありがとうございました。

    ------

    出来上がった、Media Playerですが、動作しませんというか、操作方法が分かっていないのかなのですが、

    通常、左上に、ファイル(F) 表示(V) .... とかが出ていませんが、これらは、すべて作り込むものなのでしょうか

    また、曲なども、ファイルからドラッグして、Media Player に ドロップオンさせようとしても、出来ないのですが、これもユーザーがつくりこむものでしょうか

    出来上がったものは、図のようなものです。

    2018年6月6日 2:07
  • メニューがない、D&D に対応していないのはそんなものです。アプリケーションの開発者がメニューの有無を含めて自由に作れるようにするためです。

    必要なところは自分で追加し、コントロールのメソッドやプロパティにつないでください。

    2018年6月6日 3:36
  • どうもありがとうございました。
    2018年6月6日 4:50