Расширение разметки WPF в VB.Net не работает - PullRequest
3 голосов
/ 15 апреля 2011

Я пытаюсь создать расширение разметки 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 Неизвестная ошибка сборки, 'Ключ не может быть нулевым. Название параметра: клавиша Строка 9, Позиция 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

я что-то упустил? Любая помощь будет принята с благодарностью

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Я бы никогда не использовал расширение разметки для этого, серьезно.

Как насчет чего-то вроде этого:

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 голос
/ 15 апреля 2011

Я бы последовал за Х.Б. предложение, но кроме этого вы не определяете "локальные" 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, а приложение определено в том же пространстве имен CLR в «Jumplist».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...