#c# #wpf #.net-4.5 #jump-list
#c# #wpf #.net-4.5 #список переходов
Вопрос:
У меня возникли некоторые проблемы с WPF. Когда я добавляю тег в свой app.xaml, я вижу задачу в списке переходов, но когда я пытаюсь добавить элемент в список последних файлов, новый элемент, который я добавляю, никогда не отображается. Если я создам пользовательскую категорию с именем «Последние» и вручную добавлю задачу перехода, она появится. Однако, если я перезапущу приложение, недавно добавленной задачи перехода больше не будет, только тестовая задача.
разъяснение
Изначально у меня были проблемы со списком переходов.AddToRecentCategory вообще не работает. Оно никогда не добавится в список последних. Gayot Fow помог решить эту проблему. Но проблема все еще существует: если я вручную добавлю JumpTask с пользовательской категорией, то все последние файлы удалятся, и если я открою файл и вызову addToRecent , он не отобразится. Если я удалю JumpTask, объявленный в xaml, отобразятся последние файлы.
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 не работают, но я даже не могу заставить его работать перед развертыванием.
Буду признателен за любую помощь, спасибо.
Обновить
Ответ Гайота Фоу привел меня к решению проблемы с помощью статического метода
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();
}
Как только это вызывается, категория «Последние» исчезает, и любой вызов для добавления последних элементов ничего не делает. Однако я вижу свою задачу «Новый документ» :/
Я подхожу к этому совершенно неправильно? Спасибо
Комментарии:
1. Список переходов не работает надежно при отладке, потому что это не тот же exe.
2. Спасибо, я учел это, но когда я запускаю exe вручную из папки, происходит то же самое. В этом случае это тот же EXE
3. После этого попробуйте «запуск от имени администратора»
4. Хорошо, я попытался запустить от имени администратора, все то же самое. Задача, объявленная в xaml, заменяет все задачи, которые я добавил вручную, например, последние файлы и список переходов. Статический метод AddToRecentCategory абсолютно ничего не делает. Возможно, мне просто придется создать свой собственный MRU и пропустить список переходов, хотя я действительно этого хочу.
5. У меня нет других идей. Я могу добавить некоторый код из одного из моих списков переходов, но я не знаю, будет ли от него какая-либо польза.
Ответ №1:
Вот фрагмент рабочего кода для списка переходов…
В 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 ) не будет работать надежно.
Комментарии:
1. Хорошо, ваш ответ привел меня к решению проблемы, из-за которой последние файлы не отображаются. Следуя вашей логике здесь, я устанавливаю ApplicationPath = в местоположение программы. Изменил описание и заголовок на имя файла, и теперь работает статический метод AddToRecentCategory. НО он по-прежнему работает некорректно, если я хочу также иметь статические элементы задачи в категории под названием «Задачи». Как только я добавлю его, последние файлы исчезнут, и они не будут добавляться. Идеи?
2. @Eric, я бы сказал, что это новый вопрос. На ваш первоначальный вопрос был дан ответ, всем неудобно, когда вы возвращаетесь и расширяете его, меняете область видимости и т.д. Пожалуйста, смотрите meta.stackexchange.com/questions/188625 /…
3. Мой первоначальный вопрос заключался в том, что если у меня есть элемент, объявленный в JumpList xaml, он отображается в списке, но вызовы AddToRecentCategory завершаются ошибкой. Это все еще происходит. Хотя раньше я никогда не мог заставить AddToRecentCategory работать вообще. Я пытался создать категорию «Недавние», потому что, по крайней мере, тогда я мог бы добавить ее, но она удалялась при каждом запуске приложения. Я не могу заставить их работать вместе. Мне нужен список задач и список последних.
4. неважно, это работает. Я понял, что мне не хватает CustomCategory из объявления. Я добавил CustomCategory=»Задачи», и это работает. Спасибо
5. @Эрик, если возможно, я хотел бы увидеть ваш код. Вопросы о списке переходов здесь редки, и полезно поделиться знаниями.