1

リソースに有効な相対パスがわかりません。私は考えられるすべてを試しました。動作する唯一のものは、私のシステムでのみ正しいが、デプロイされたバージョンでは正しくない絶対パスです。

私の知る限り、この非常に単純なパスが機能するはずです。

public class GreyscaleEffect : ShaderEffect
{
    private static PixelShader _pixelShader = new PixelShader()
        { UriSource = new Uri("/Effects/Greyscale.ps", UriKind.Relative) };

エラーThe type initializer for 'FSR.WPF.Utilities.UI. GreyscaleEffect' threw an exception.内部例外が発生します:Cannot locate resource 'effects/greyscale.ps'.

私も次のことを試しました:

Uri(";component/Effects/Greyscale.ps", UriKind.Relative)
Uri("/;component/Effects/Greyscale.ps", UriKind.Relative)
Uri("/FSR.WPF.Utilities.UI;component/Effects/Greyscale.ps", UriKind.Relative)

他の場所(MUSUIのxamlファイル内)では、次のパスが使用され、正常に機能します。

<Image Source="/FSR.WPF.Utilities.UI;component/assets/CurrencyFlags/USD.png"

ですから、なぜこのようなケースがうまくいかないのか理解できません。

次の絶対パスのみが機能します。

Uri("C:\TFS\MUS 6.1.x\Mosaic Middleware\FSR.WPF.Utilities\FSR.WPF.Utilities.UI" +
    "\Effects\Greyscale.ps")

@また、文字列の前で使用する、UriKind.Absoluteを使用する、2番目のパラメーターを完全に除外するなどのすべての組み合わせで、上記のすべてを試しました。絶対的な道以外に何も機能せず、私は頭がおかしくなっています。

これがソリューションの構造です。メインプロジェクトはMUSUIで、下部は太字で示されています。この効果クラスと.psファイルは両方とも、参照されるアセンブリFSR.WPF.Utilities.UIのルートにあるEffectsフォルダーにあります。

ここに画像の説明を入力してください

とにかく、私はこれがどういうわけか機能しなければならないことを知っています。特にアセンブリ名にハードコーディングする必要がない場合は、可能な限り最短の相対パスを把握できる人なら誰でも賞品を獲得できます。

4

2 に答える 2

7

相対URIを指定することはできません。絶対URIである必要があります。XAMLで相対URIを指定すると、実際にはを使用して絶対URIに変換されIUriContext.BaseUriますが、C#コードでは現在の場所に関する情報がないため、相対URIを使用することはできません。

pack://URIスキームを使用してURIを指定する必要があります。

UriSource = new Uri("pack://application:,,,/YourAssembly;component/Effects/Greyscale.ps");
于 2012-04-26T23:53:17.880 に答える
0

これはWPFのPixelShaderクラスのバグだと思います。PixelShaderはBaseUriコンテキストを永続化できるIUriContextインターフェイスを実装していないのに対し、System.Windows.Controls.Image&System.Windows.Documents.Hyperlink&System.Windows.ResourceDictionaryなどは実装しているからです。 IUriContext、相対Uriを使用できるようにする

PixelShaderの相対URIセンシティブを有効にするには、たとえば、ハイパーリンクをリダイレクタとして使用できます

    <Window>
    <Window.Resources>
    <Hyperlink x:Key="ItemForRedirectKey" NavigateUri="{Your PixelShader.ps relative uri}" TargetName="{Binding Path= NavigateUri,RelativeSource={RelativeSource Self}}" />
    <PixelShader x:Key="PixelShaderKey" UriSource={Binding Path=TargetName,Source={StaticResouce ItemForRedirectKey}   }/>
    </Window.Resources>
    </Window>
于 2013-10-25T09:57:24.077 に答える