• ベストアンサー

WPFで常にカーソルを非表示にするには?

C#でWPFプログラムでカーソルを常に非表示にする必要がでてきました。 WindowsFormアプリでは、 Cursor.Hide(); とすると IsEnabled=false; としても、カーソルは表示されません。 WPFアプリでは、Hide()は使えないので、this.Cursor = Cursor.NONE; とする事になるかと思いますが、 これでは IsEnabled = false; となった時カーソルが表示されてしまうようです。 何か案はありますでしょうか? ご教示よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.1

https://stackoverflow.com/questions/38783195/change-mouse-cursor-to-stop-pointer-on-hover-on-disabled-button-in-wpf ここを読むとわかりますが、スタイル定義として、IsEnabled=Falseの時のCursor設定をNoにする事で回避できると思われます。

PED02744
質問者

お礼

ありがとうございました。 対応方法として、Window上の一番外側GridをDisableにする事で、対応する事としました。 画面側: <Window x:Class="MainWindow">   <Grid x:name="dummyFrame">     ~   </Grid> </Window> ソース側 public partial class MainWindow : Window {   public MainWindow()   {     InitializeComponent();     this.Cursor = Cursors.None;   }   private void Button_Click(object sender, RoutedEventArgs e)   {     dummyFrame.IsEnabled = false;     Task.Run(() =>     {       Thread.Sleep(5000);       Dispatcher.Invoke(() =>       {         dummyFrame.IsEnabled = true;       });     });   } } これで画面がDisable状態に見えた時でも、カーソルが表示されないようです。

関連するQ&A

  • MDIで、子フォームのみWPF

    winformで作ったアプリケーションに、MDIの導入を考えています。と同時にWPFにも興味があるのですが、MDIで作られる子フォームのみWPFにすることは可能でしょうか? 親winform⇒子winformの場合 //Form4はwindowsform Form4 childform = new Form4(); childform.MdiParent = this; childform.Show(); このように書いています。 それを 親winform⇒子WPFで //UserControl1はユーザーコントロールWPF UserControl1 childform = new UserControl1(); childform.MdiParent = this; childform.Show(); このように書いてみたのですが、エラーで使えませんでした。 MdiParentとShowに赤い線が引かれ、 自動機能で MdiParentには public Form1 MdiParent { get; set; } Showには internal void Show(){ throw new NotImplementedException(); } が、作られましたが解決には至りませんでした。 環境はvisualstdio2013でC#です。 そもそも子formのみWPFは可能なのでしょうか? 可能であれば、方法を教えてください。

  • win32APIとC(C++)を使ってカーソルがクライアント領域内に入

    win32APIとC(C++)を使ってカーソルがクライアント領域内に入ったときだけマウスカーソルが非表示になるようにしたいのですがどうしたらいいでしょうか。 今現在は、ShowCursor()という関数を使って引数をfalseにして非表示に使用としているのですがうまくいきません。 以下のように記述して実行してみると、 ShowCursor(false); MessageBox( hWnd, _T("キーダウン"), _T("メッセージ"), MB_OK ); メッセージボックスが出ている間はマウスカーソルが消えるのですが、メッセージボックスを閉じるとカーソルが自動的に再表示されてしまいます。 プログラム実行中は常にマウスカーソルを非表示にしたいのですが、どなたか教えていただけないでしょうか。

  • マウスカーソルの表示・非表示

    いつもお世話になっております。 VS2005でC++を利用してWindowsアプリケーションを作成しております。 Webで調べてもあまり良い情報が得られなかったため質問させて頂きます。 マウスカーソルを非表示にして、 マウスムーブがあったらマウスカーソルを表示する といったプログラムを組みたいと思っているのですが、 マウスカーソルの表示等についての関数はあるのでしょうか。 ご教授お願いいたします。

  • コントロールの表示・非表示

    C++Builder6を使用しています。 コントロールをあらかじめ配置しておき, ボタンを押すことでコントロールを表示(使用可能) したり,非表示(使用不可)にしたりしたいです。 ボタンは表示用と非表示用の2つを用意しました。 そこで コンポーネント->Visible = True; コンポーネント->Visible = False; のような記述をしました。 が,Trueにはできるのですが,Falseができません。 Show,Hideも試してみたのですが,やはりHideができません。 デフォルトはFalseの状態で見えないようにしています。 一度TrueにするとFalseにはできないのでしょうか。 アドバイスをお願いします。

  • マウスムーブでのマウスカーソル表示・非表示

    いつもお世話になっております。 VS2005でC++を利用してWindowsアプリケーション作成を行っています。 マウスカーソルが一定時間動かなかったらマウスカーソルを非表示、 マウスカーソルが移動したらマウスカーソルを表示させる このようなプログラムを作成したいと考えています。 今、ShowCursorでマウスカーソルの表示・非表示はできたのですが、 「マウスムーブが一定時間無かった場合」というのは どのように調べたらよいのでしょうか。 ご教授お願いいたします。

  • c言語でのカーソル移動(?)について

    C言語でCUIに表示された20*20の●をカーソルで移動するプログラムを作ろうと思い、 カーソルでの移動の部分でカーソルのアスキーコードを探しても無く、どうプログラムしたら良いのかがわからなくて、困っています。 やり方を教えていただけませんでしょうか?

  • Flashで、ナビゲーションがマウスカーソルに追従し、カーソルに近づくと止まるボタン

    FlashのActionScriptについての質問です。 参考書を見ながらやっていて、 ナビゲーションがマウスカーソルに追従し、カーソルに近づくと止まるボタンを作りたいのですが、 マウスに追従してきません。 _rootタイムラインのムービークリップctr_mcsetに、 onClipEvent (enterFrame) { if (_root.woksctr == true) { this._x += (_parent._xmouse-this._x)/5; this._y += (_parent._ymouse-this._y)/5; } } を記述しました。 ctr_mcsetのタイムラインに、触れると追従が止まるボタンの領域として、 cl_bn02を配置して、クリッカブル表示されないように on (release) { } onClipEvent (load) { this.useHandCursor = false; } を記述しました。 その、cl_bn02のタイムラインに、_up,_over,_downラベルをつくり、 _upには、 stop(); this.hitArea = hit; this.hit._visible = false; _root.worksctr = true; _over,_downには、 _root.worksctr = false; と記述しました。 参考書の通りだと、これでマウスカーソルにナビゲーションが近づくと静止し、 離れると追従するらしいのですが、止まったまま追従してきません。 if (_root.woksctr == true)の、==を、=だけにすると、追従はしてきますが、 ムービークリップの中心点にマウスカーソルがいつもいってしまって、 左右のボタンがうまく押せません。 どこか記述がヘンなのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • テーブルで複数行をまとめて非表示にしたいです

    よろしくお願い致します。 以下の記述でエラーが出てしまいます。 見よう見まねで書いているので、根本的に間違っているのでしょうか・・・。 function open_close_hide(){  var row = document.getElementsByClass('hide');  if (row.style.display == 'none') {   row.style.display = '';   } else {   row.style.display = 'none';   }  } テーブルの非表示にしたい行は<tr class = "hide">としています。 クリックする部分は <a href=\"javascript:void(0):\" onClick=\"open_close_rowhide();return false;\">表示/非表示</a> としています document.getElementByIDで一行ごとに非表示にするのには成功したのですが、 classで複数行を同時非表示にすることが出来ません。 getElementsByClassNameでも駄目でした。 詳しい方がおられましたら、よろしくお願い致します。

  • WPFのDatagridの縦スクロール

    VisualBasic2010を利用してWindows Formアプリケーションを 開発しております。 その際にForm上にElementHostを配置しWPFで構築した DataGridを設定しグリッドにデータを表示しております。 データ表示自体は問題なく行えているのですが、 Datagridの縦スクロールをWindows Form上に配置する ボタンから制御したいと考えております。 このような制御の方法をご存知の方がいらっしゃいましたら ご教授頂けますと幸いです。 WPF側 <UserControl x:Class="Grid_Main" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:_01_AAAA" mc:Ignorable="d" d:DesignHeight="200.373" d:DesignWidth="300" Height="Auto" Width="Auto"> <DataGrid ItemsSource="{Binding}" ScrollViewer.CanContentScroll="True" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling" ScrollViewer.IsDeferredScrollingEnabled="True" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" HeadersVisibility="None" Margin="0,0,0,0" BorderBrush="{x:Null}"> <DataGrid.Columns> <DataGridTemplateColumn > <!-- 表示時のセルのテンプレートを指定 --> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <!-- 表示時のセルのテンプレートに同プロジェクト内のクラスを指定 --> <local:Grid_Detail /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <!-- 編集時のセルのテンプレートを指定 --> <!-- 表示専用であれば定義不要 --> </DataGrid.Columns> </DataGrid> </UserControl>

  • Visual C++ 2008 EEでメッセージ表示

    Visual C++ 2008 EEを使用し、以下のコードを組みました。これは1つのフォーム(仮に質問フォームとする)に3つのボタンを作成し、ボタンを押すとそれぞれの3種類の質問項目フォームにいって、質問回答が終わったら再び質問フォームに戻ります。このとき、一度回答した質問項目のボタンは選べないようにしていて、全部の質問に答えた場合(全てのボタンが選べなくなった場合)に「これで質問は終わりです」というようなメッセージを表示したいのですが、方法が分からないのでご教授願います。 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { this->Hide(); Sai500^ cSai500 = gcnew Sai500(); cSai500->gvflnm(this->flnm); cSai500->ShowDialog(); this->button1->Visible = false; this->Show(); } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { this->Hide(); Sai030^ cSai030 = gcnew Sai030(); cSai030->gvflnm(this->flnm); cSai030->ShowDialog(); this->button2->Visible = false; this->Show(); } private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) { this->Hide(); Sai040^ cSai040 = gcnew Sai040(); cSai040->gvflnm(this->flnm); cSai040->ShowDialog(); this->button3->Visible = false; this->Show(); }

専門家に質問してみよう