3

このブログ投稿ごとに VB.Net マークアップ拡張機能を作成しようとしていますが、vb.net で

<Application x:Class="Application"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    ShutdownMode="OnExplicitShutdown">
    <Application.Resources>        
    </Application.Resources>
    <JumpList.JumpList>
        <JumpList ShowRecentCategory="True">
            <JumpTask Title="Save as..." Arguments="-saveas"
                      ApplicationPath="{local:ApplicationFullPath}">
            </JumpTask>
        </JumpList>
    </JumpList.JumpList>
</Application>

しかし、それは投げています

エラー 1 不明なビルド エラー、'キーを null にすることはできません。パラメータ名: key Line 9 Position 62.' C:\Users\jessed.ECREATIVE\My Dropbox\Projects\c2d2\c2d2\Application.xaml 9 62 c2d2

例の c# 部分を次のように変換しました

Public Class ApplicationFullPath
    Inherits Markup.MarkupExtension

    Public Overrides Function ProvideValue(ByVal serviceProvider As System.IServiceProvider) As Object
        Return System.Reflection.Assembly.GetExecutingAssembly.Location()
    End Function

End Class

私は何かを逃していますか?どんな助けでも大歓迎です

4

2 に答える 2

2

真剣に、これにマークアップ拡張機能を使用することは決してありません。

代わりにこのようなものはどうですか?

public partial class App : Application
{
    public static string ApplicationFullPath
    {
        get { return Assembly.GetExecutingAssembly().Location; }
    }

    ...
<JumpTask ApplicationPath="{x:Static local:App.ApplicationFullPath}"/>

ちなみに、マークアップ拡張クラス名は「Extension」で終わる必要があります。これで問題が解決する可能性もあります(クラスは ApplicationFullPathExtensionと呼ばれます が、XAMLでの呼び出しは引き続き ApplicationFullPathになり ます)

于 2011-04-14T23:21:28.990 に答える
1

私はHBの提案に従いますが、それ以外は、上記の「ローカル」xmlnsを定義していません。次のようなものが必要です。

<Application x:Class="Application"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MyNamespace"
    ShutdownMode="OnExplicitShutdown">
    <!-- ... existing stuff -->
</Application>

MyNamespace は、マークアップ拡張機能が定義されている CLR 名前空間です。

リンク先のブログからコードをダウンロードすると、完全な例を見ることができます。

<Application x:Class="Jumplist.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Jumplist"
             StartupUri="MainWindow.xaml">

    <Application.Resources>

    </Application.Resources>

    <JumpList.JumpList>
        <JumpList ShowRecentCategory="True"
                  ShowFrequentCategory="True">
            <JumpTask Title="Say Hello!" 
                      Description="Display Greeting Message" 
                      ApplicationPath="{local:ApplicationFullPath}"
                      Arguments="{x:Static local:ApplicationActions.SayHello}"
                      IconResourcePath="{local:ApplicationFullPath}"
                      IconResourceIndex="0" />

        </JumpList>
    </JumpList.JumpList>

</Application>

両方のローカル xmlns が定義されており、アプリが "Jumplist" の同じ CLR 名前空間で定義されていることに注意してください。

于 2011-04-14T23:32:44.380 に答える