2011-04-14 80 views
3

我想每this blog post但在vb.netWPF標記擴展在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> 

創建VB.Net標記擴展,但它是扔

錯誤1未知的構建錯誤,'密鑰不能爲空。 參數名稱:鑰匙行9位置62.' C:\ Users \用戶jessed.ECREATIVE \我的收存箱\項目\ 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 

我思念的東西?任何幫助將不勝感激

+0

創建一個標記擴展來返回一個值是...我不知道,只是不這樣做。 – 2011-04-14 23:14:15

回答

2

我永遠不會使用標記擴展爲此,嚴重。

如何這樣的事情,而不是:

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

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

標記擴展類的名稱應爲「擴展」的方式結束,也許這甚至會解決您的問題(類會被稱爲ApplicationFullPathExtension,在XAML通話仍然是ApplicationFullPath雖然)

1

我會跟隨H.B.建議,但除此之外,您不需要定義上面的「本地」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 namesapce

如果您下載從博客,你鏈接到你可以看到完整的示例代碼,它是:

<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在爲「跳轉列表」的相同的CLR命名空間中定義。

+0

好眼睛,先生(編輯:或女士)。 – 2011-04-14 23:34:28