我在使用WPF时遇到了一些麻烦。当我将标记添加到app.xaml时,我可以在跳转列表中看到任务,但是当我尝试向最近的文件列表添加项目时,我添加的新项目从未显示出来。如果我创建一个名为"Recent"的CustomCategory并手动添加一个JumpTask,它就会显示出来。然而,如果我重新启动应用程序,新添加的JumpTask不再存在,只是测试任务。
最初,我有问题与JumpList。AddToRecentCategory根本不起作用。它永远不会添加到最近的列表中。Gayot Fow帮助解决了这个问题。但是问题仍然存在,如果我手动添加一个带有自定义类别的JumpTask,那么所有最近的文件都会清除,如果我打开一个文件并调用addToRecent,它不会显示出来。如果我删除了在xaml中声明的JumpTask,那么最近的文件就会显示出来。
XAML:<JumpList.JumpList>
<JumpList ShowRecentCategory="True">
<JumpTask Title="Test" Description="Test"
Arguments="/test" CustomCategory="Tasks" />
</JumpList>
</JumpList.JumpList>
添加最近条目的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();
无论我是从Visual Studio 2013(更新2)运行应用程序,还是从调试目录运行exe,都会发生这种情况。有人知道为什么这不起作用吗?
我在某处读到ClickOnce部署的应用程序不工作,但我甚至不能让它在部署之前工作。
请帮忙,谢谢。
Gayot Fow的回答使我用静态方法解决了这个问题
JumpList.AddToRecentCategory(jt);
不做任何事
我改变了我的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();
虽然最近文件的问题已经解决了,但我仍然不能让它与一个名为"任务"的自定义类别共存
在我的应用程序启动时,我调用以下代码: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();
}
一旦调用了, Recent类别就会消失,任何添加最近项目的调用都不会执行任何操作。但是,我确实看到了"新建文档"任务:/
我这样做完全错了吗?由于
下面是跳转列表的工作代码片段…
在App.xaml…<JumpList.JumpList>
<JumpList
ShowFrequentCategory="False"
ShowRecentCategory="False"
JumpItemsRejected="OnJumpItemsRejected"
JumpItemsRemovedByUser="OnJumpItemsRemoved">
</JumpList>
</JumpList.JumpList>
在App.xaml.cs private void OnJumpItemsRejected(object sender, JumpItemsRejectedEventArgs e){}
private void OnJumpItemsRemoved(object sender, JumpItemsRemovedEventArgs e){}
代码…
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;
}
}
这个方法创建一个形式为…的跳转任务
full executable path of the program |=> name of the directory where it was invoked
…这是通过静态方法AddToRecentCategory添加到最近的类别。这与将任务添加到跳转列表的本地副本的代码形成对比。必须为应用程序路径提供可执行文件的完全限定名称。此外,正如在评论中提到的,当它安置在自己的安装目录中时,它似乎工作得最好,并且每次覆盖可执行文件时,跳转列表将被删除。在调试模式下使用它(针对vshost.exe)将无法可靠地工作。