0

hand2.curC#-WPFアプリケーションで指定されたカスタムカーソルを使用しています。Imagesアプリケーションで使用するすべての画像を含むという名前のフォルダーにカーソルを追加しました。ただし、カスタムカーソルを次のように使用するための相対パスを追加できないことに気付きました。

    Cursor newCur = new Cursor("Images\\hand2.cur");
    window.Cursor = newCur;

だから私はこれを使用しました:

    string absolute = System.IO.Path.GetFullPath("hand2.cur");
    Cursor newCur = new Cursor(absolute);
    window.Cursor = newCur;

これによりhand2.cur、フォルダ内のファイルが検索され\bin\Releaseます。そこでファイルを追加して、動作させました。

しかし、問題は、Publishこのアプリケーションを別のコンピューターで使用すると、機能しないことです。ここで問題はカーソルファイルのパスにあります。これらの3行をコメント化した後で展開すると、正しく機能するためです。では、この問題を修正するにはどうすればよいですか?

ImageXAMLコードのフォルダーにある他の画像を使用していますが、正常に移植されているようです。ただし、WPFに関する私の知識は限られているため、誰かがアイデアを持っている場合は、それが役立ちます。

編集:プロジェクトに画像フォルダを追加しました。また、カーソルファイルのビルドアクションをに設定しhand2.curましたEmbedded Resource。ただし、次の2行を使用すると、が表示されますXAMLParseException

    System.Windows.Resources.StreamResourceInfo info = Application.GetResourceStream(new Uri("pack://application:,,,/Slideshow;component/Images/hand2.cur"));
        window.Cursor = new System.Windows.Input.Cursor(info.Stream); 

Inner Exceptionエラーの詳細を表示したときのフィールドは次のとおりです。{"Cannot locate resource 'images/hand2.cur'."}

4

2 に答える 2

3

カーソルをアプリ/アセンブリ内のリソースにしてから、 GetResourceStreamパックUriとともにリソースの場所に使用できます。StreamResourceInfoのストリームをカーソルのctorに渡します。例えば

var info = Application.GetResourceStream(new Uri("pack://application:,,,/Images/hand2.cur"));
var cursor = new Cursor(info.Stream);
于 2012-10-18T01:27:29.740 に答える
0

リソースファイルにカーソルファイルhand2.curを追加した後、これが機能するようになりました。Resource1.resx次に、コードで次のステートメントを使用しました。

window.Cursor = new Cursor(new System.IO.MemoryStream(MyNameSpace.Resource1.hand2));
于 2012-10-18T06:19:36.833 に答える