简体   繁体   English

每当我的WPF应用启动时,JumpList都会重置

[英]JumpList resets everytime my WPF app starts

I'm having some trouble with WPF's . 我在使用WPF时遇到了一些麻烦。 When I add the tag to my app.xaml, I can see the task in the jump list, but when I try to add an item to the recent files list, the new item I add never shows up. 当我将标签添加到我的app.xaml中时,我可以在跳转列表中看到该任务,但是当我尝试将项目添加到“最近的文件”列表中时,我添加的新项目永远不会显示。 If I create a CustomCategory called "Recent" and manually add a JumpTask, it shows up. 如果我创建一个名为“ Recent”的CustomCategory并手动添加一个JumpTask,它将显示出来。 However, if I restart the app, the newly added JumpTask is no longer there, just the test task. 但是,如果我重新启动应用程序,则新添加的JumpTask不再在那里,仅是测试任务。

clarification 澄清

Originally, I had issues with JumpList.AddToRecentCategory not working at all. 最初,我在JumpList.AddToRecentCategory上根本无法使用。 It would never add to the recent list. 它永远不会添加到最近的列表中。 Gayot Fow helped solved that. Gayot Fow帮助解决了这一问题。 But the issue still exists that if I manually add a JumpTask with a custom category, then all of the recent files clear out, and if I open a file and call addToRecent, it does not show up. 但是问题仍然存在,如果我手动添加具有自定义类别的JumpTask,那么所有最近的文件都将清除,并且如果我打开文件并调用addToRecent,它不会显示。 If i remove the JumpTask declared in xaml, then the recent files show up. 如果我删除在xaml中声明的JumpTask,则显示最近的文件。

XAML: XAML:

<JumpList.JumpList>
    <JumpList ShowRecentCategory="True">

        <JumpTask Title="Test" Description="Test"
                  Arguments="/test" CustomCategory="Tasks" />
    </JumpList>

</JumpList.JumpList>

C# code to add recent item C#代码添加最新项目

var jumpList = JumpList.GetJumpList(Application.Current);
if (jumpList == null) return;

//create a jump task
var jt = new JumpTask();

jt.Title = System.IO.Path.GetFileNameWithoutExtension(FileName);
jt.Description = jt.Title;
jt.CustomCategory = jt.Title;
jt.ApplicationPath = FileName;

//JumpList.AddToRecentCategory(jt);

jt.CustomCategory = "Recent";
jumpList.JumpItems.Add(jt);

jumpList.Apply();

This occurs whether I run the app from Visual Studio 2013 (update 2), or run the exe from the debug directory. 无论是从Visual Studio 2013(更新2)运行应用程序,还是从调试目录运行exe,都会发生这种情况。 Does anyone have any ideas why this isn't working? 有谁知道为什么这行不通?

I read somewhere about ClickOnce deployed apps not working, but I can't even get it to work before being deployed. 我在某处读到有关ClickOnce部署的应用程序无法正常工作的信息,但在部署之前我什至无法使其正常运行。

Any help would be appreciated, thanks. 任何帮助,将不胜感激,谢谢。

UPDATE UPDATE

Gayot Fow's answer lead me to resolve the problem with the static method Gayot Fow的答案引导我使用静态方法解决问题

JumpList.AddToRecentCategory(jt);

not doing anything. 什么也没做

I changed my AddToRecent code as follows: 我将AddToRecent代码更改如下:

var jumpList = JumpList.GetJumpList(Application.Current);
if (jumpList == null) return;


string title = System.IO.Path.GetFileNameWithoutExtension(FileName);
string programLocation = Assembly.GetCallingAssembly().Location;

var jt = new JumpTask
{
    ApplicationPath = programLocation,
    Arguments = FileName,
    Description = FileName,
    IconResourcePath = programLocation,
    Title = title
};
JumpList.AddToRecentCategory(jt);


jumpList.Apply();

PROBLEM 问题

Although the issue with recent files is resolved, I still cannot get it to co-exist with a custom category called "Tasks" 尽管最近文件的问题已解决,但我仍然无法使其与名为“任务”的自定义类别共存

On my app startup, I call this code: 在我的应用启动时,我将此代码称为:

var jumpList = JumpList.GetJumpList(Application.Current);
if (jumpList != null)
{

    string title = "New Document";
    string programLocation = Assembly.GetCallingAssembly().Location;

    var jt = new JumpTask
    {
        ApplicationPath = programLocation,
        Arguments = "/new",
        Description = title,
        IconResourcePath = programLocation,
        Title = title
    };
    jumpList.JumpItems.Add(jt);

    jumpList.Apply();
}

Once this is called, the Recent category disappears, and any call to add recent items does nothing. 调用此方法后,“最近”类别将消失,并且任何添加最近项的调用都将不起作用。 I do see my "New Document" task, however :/ 我确实看到了“新文档”任务:/

Am i approaching this totally wrong? 我是完全错误的吗? Thanks 谢谢

Here's a snippet of working code for jump listing... 这是跳转列表的工作代码段...

In App.xaml... 在App.xaml中...

<JumpList.JumpList>
    <JumpList
    ShowFrequentCategory="False" 
    ShowRecentCategory="False"
    JumpItemsRejected="OnJumpItemsRejected" 
    JumpItemsRemovedByUser="OnJumpItemsRemoved">
    </JumpList>
</JumpList.JumpList>

in App.xaml.cs 在App.xaml.cs中

    private void OnJumpItemsRejected(object sender, JumpItemsRejectedEventArgs e){}
    private void OnJumpItemsRemoved(object sender, JumpItemsRemovedEventArgs e){}

in code... 在代码中...

    public object PopulateJumpList(string directoryName)
    {
        try
        {
            string programLocation = Assembly.GetCallingAssembly().Location;
            var di = new DirectoryInfo(directoryName);
            var jt = new JumpTask
            {
                ApplicationPath = programLocation,
                Arguments = directoryName,
                Description = "Run at " + directoryName,
                IconResourcePath = programLocation,
                Title = di.Name
            };
            JumpList.AddToRecentCategory(jt);
            return jt;
        }
        catch (Exception ex)
        {
            return ex;
        }
    }

this method creates a jump task of the form... 此方法创建以下形式的跳转任务:

full executable path of the program |=> name of the directory where it was invoked

...this is added to the recent category via the static method AddToRecentCategory. ...通过静态方法AddToRecentCategory将其添加到最新类别。 It contrasts to your code where you are adding the task to the local copy of the jump list. 它与将任务添加到跳转列表的本地副本中的代码形成对比。 The fully qualified name of the executable must be given for the application path. 必须为应用程序路径提供可执行文件的标准名称。 Also, as mentioned in the commentary, it seems to work best when it settles into its own installation directory, and the jump list will be deleted each time the executable is overwritten. 另外,如注释中所述,当它安置在其自己的安装目录中时,它似乎最好地工作,并且每次可执行文件被覆盖时,跳转列表都将被删除。 Using it in debug mode (against the vshost.exe) will not work reliably. 在调试模式下(针对vshost.exe)使用它不能可靠地工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM