我在使用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();
}
调用此方法后,“最近”类别将消失,并且任何添加最近项的调用均不执行任何操作。我确实看到了“新文档”任务,但:/
我是完全错误的做法吗?谢谢
这是跳转列表的工作代码段...
在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)使用它不能可靠地工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句