Так что извините, это может быть немного расплывчатым, я на самом деле не программист Windows. Я написал это приложение год go, и оно работало нормально. Пошел обновить и исправить ошибку сегодня, и теперь эта часть не работает. Я предполагаю, что это связано с новой версией VS или чем-то другим, потому что я изменил некоторые несвязанные типы переменных с float на double, чтобы работать с Math.Round (). С тех пор я изменил их обратно и даже перезагрузил старую версию из git, и она все еще не работает.
Что должно произойти: Щелкните правой кнопкой мыши по элементу меню, установите _recentFilesIndex на индекс выбранного Появится всплывающее меню, нажмите «Удалить», и элемент будет удален по индексу из этого списка.
Проблема заключается в следующем: mi
должен быть текстом этого пункта меню, который является путем к файл. Теперь он возвращается как null
. e.OriginalSource
допустимо, при отладке я вижу, что свойства DataContext
и Text
на самом деле являются путями к файлам. Он не преобразует его в TextBlock
, как это было раньше.
Я попытался установить его на e.OriginalSource.DataContext
, но теперь я не могу получить доступ к этому свойству. (Честно говоря, не знаю, смог ли я раньше, это был год, и я работал над другими вещами). Установка mi
в e.OriginalSource
проходит проверку null
, но я все еще не могу получить доступ ни к одному из этих свойств. Я получаю только ToString
, GetType
, GetHashCode
и Equals
в качестве свойств.
Итак, вопрос в том, как мне получить информацию об элементах меню? Это может быть текст элемента меню, DataContext или индекс элемента меню.
XAML
<MenuItem Name="mnuRecentLoads" Header="Recent Loads" ItemsSource="{Binding RecentFiles}" Click="mnuRecentLoads_OnClick" MouseRightButtonUp="mnuRecentLoads_OnRMBUp" >
<MenuItem.ContextMenu>
<ContextMenu >
<MenuItem Header="Remove" Click="mnuRemove_OnClick" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Parent}" DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"/>
</ContextMenu >
</MenuItem.ContextMenu>
</MenuItem >
CS
private void mnuRecentLoads_OnRMBUp(object sender, MouseButtonEventArgs e)
{
_recentFilesIndex = -1;
var mi = e.OriginalSource as TextBlock;
if (mi == null)
return;
string path = (string) mi.DataContext;
_recentFilesIndex = mnuRecentLoads.Items.IndexOf(path);
}
private void mnuRemove_OnClick(object sender, RoutedEventArgs e)
{
if (_recentFilesIndex < 0)
{
_recentFilesIndex = 0;
return;
}
_recentFiles.RemoveAt(_recentFilesIndex);
mnuRecentLoads.Items.Refresh();
}
Спасибо за любую помощь, которую вы можете оказать.