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 ​​未知的构建错误,'键不能为空。参数名称: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 都已定义,并且 App 定义在“Jumplist”的同一 CLR 命名空间中。

于 2011-04-14T23:32:44.380 回答