トップ回答者
Silverlight 上で起動時にマウスカーソルが消去できない

質問
-
お世話になっております。
Silverlight での起動時マウスカーソル消去がうまくいかず困っております。
OS:
・Windows XP, Windows 7
環境:
・Microsoft Visual Studio 2010 C#
・Microsoft .NET Framework 4
・Silverlight5
ブラウザ:
・IE7 又は IE8
詳細:
画面構成として、ASP.NET の aspx 内にオブジェクトタグで Silverlight.xap を表示させ、
IE を F11キーによるフルスクリーンで表示しております。
Silverlight 内の処理は MainPage.xaml という画面に navigation:Frame が配置されており、
一定時間毎に色々な xaml ページに切り替え表示するというものです。
本アプリはユーザーが操作するものではなく、
モニタに色々な情報を表示するだけのいわゆるビューアーとなります。
(よく地下鉄やショップなどで見かける、CM などが流れている液晶パネル的なもの)
ですので、対象端末にマウスやキーボードが接続される事はありません。
ここで問題があります。
マシンを立ち上げてスタートアップから IE が起動され、
全画面に IE が表示、その後 Silverlight の xaml ページが表示されるのですが、
マウスカーソルが中央に表示されたままになってしまうのです。
(マウスカーソルは非表示にしたいのです。)
当然ながら各 Xaml ページの Cursor プロパティは全て [None] に設定しております。
尚、その状態でマウスを接続し、少しでもマウスを動かすと非表示になります。
恐らくですが MouseEnter イベントによって Cursor の None が有効になっているような感じです。
(マウスを動かさないとページ内にカーソルがあっても MouseEnter がコールされない。)
どうにかマウスを起動時から非表示にしたいのですが対処方法がわからない状態です。
Silverlight 5 がリリースされた為、そちらに切り替えましたが駄目でした。
何か情報をお持ちの方はご教示願います。
2011年12月15日 0:26
回答
-
回答ではないのですが、この現象はマウスを接続せずにPCを起動した場合だけ発生するということでしょうか?
とりあえず手元の環境(Silverlight4)でNavigationFrameworkを新規作成し、Home.xamlのLayoutRootをCursor="None"にして、マウスを外して起動してみましたが、PC起動後にマウスを動かしているせいか、カーソルは消えました。- 回答の候補に設定 山本春海 2011年12月22日 8:19
- 回答としてマーク がんばろうSilverlight 2012年1月16日 7:32
2011年12月16日 0:29
すべての返信
-
回答ではないのですが、この現象はマウスを接続せずにPCを起動した場合だけ発生するということでしょうか?
とりあえず手元の環境(Silverlight4)でNavigationFrameworkを新規作成し、Home.xamlのLayoutRootをCursor="None"にして、マウスを外して起動してみましたが、PC起動後にマウスを動かしているせいか、カーソルは消えました。- 回答の候補に設定 山本春海 2011年12月22日 8:19
- 回答としてマーク がんばろうSilverlight 2012年1月16日 7:32
2011年12月16日 0:29 -
綾里様
ご回答、ありがとうございます。
説明不足で申し訳ありません。
マウスは接続されていてもマウスを動かさなければカーソルが消えずに残ります。
接続されていなくても、同じく消えずに残ります。手順:
① Silverlight が設定されている aspx を開く。
② Silverlight が表示される前に Silveright 表示領域に事前にマウスカーソルを配置。(マウスはこの時点で放置)
③ Silverlight が表示されてもマウスカーソルが消えない。← NGただ、おっしゃる通り、Silverlight ナビゲーションアプリで作成したものは
起動してマウスを動かさなくても正しくカーソルが非表示になっていました。という事で、現状の私のソースと Silverlight ナビゲーションアプリで作成したものを比べることにしました。
すると、Silverlight ではなく、aspx の記述が大きく違う事に気づきました。
body タグだけ抜粋しますが、私のソースでは aspx の body が以下の記載になっていました。<body>
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/SilverlightApplication.xap"/>
<param name="background" value="white" />
<param name="minRuntimeVersion" value="5.0.60818.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.60818.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Microsoft Silverlight の取得" style="border-style:none"/>
</a>
</object>
</body>そして、ナビゲーションアプリで自動生成されたコードは以下のようになっていました。
<body>
<form id="form1" runat="server" style="height:100%"> ← ★ [form] がある。
<div id="silverlightControlHost"> ← ★ [div] がある。
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/SilverlightApplication.xap"/>
<param name="background" value="white" />
<param name="minRuntimeVersion" value="5.0.60818.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.60818.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Microsoft Silverlight の取得" style="border-style:none"/>
</a>
</object>
<iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe> ← ★ [iframe] がある。
</div>
</form>
</body>ですので、私のソースに上記★部分を追加したところ、起動時に正しくマウスカーソルが消えるのを確認しました。
逆にナビゲーションアプリの方も★部分を削除すると、私のコードと同じくマウスカーソルが残るようになりました。これにてとりあえず NG であるマウスカーソルが残る現象は解決いたしました。
しかしながら、なぜ★部分を追加する事によって本現象が修正されたのかがわからない状態です。- 編集済み がんばろうSilverlight 2012年1月16日 7:32
2011年12月16日 6:34