#.net #wpf #binding
#.net #wpf #привязка
Вопрос:
Я хочу привязать видимость mnuAddLessonAfter к видимости mnuAddLessonBefore. Кажется, я не могу заставить это работать, т. Е. Установка видимости mnuAddLessonBefore в свернутое значение скрывает только mnuAddLessonBefore, а не mnuAddLessonAfter. Что я делаю не так?
<TreeView Grid.Column="0"
HorizontalAlignment="Stretch"
Name="treeViewLesson"
VerticalAlignment="Stretch"
SelectedItemChanged="treeViewLesson_SelectedItemChanged"
PreviewMouseLeftButtonDown="treeViewLesson_PreviewMouseLeftButtonDown"
AllowDrop="True"
Drop="treeViewLesson_Drop"
MouseMove="treeViewLesson_MouseMove"
DragEnter="treeViewLesson_DragEnter">
<TreeView.ContextMenu>
<ContextMenu Name="context_menu_lesson">
<MenuItem Name="mnuAddLesson"
Header="Add lesson"
Click="mnuAddLesson_Click" />
<MenuItem Name="mnuAddLessonBefore"
Header="Add lesson before"
Click="mnuAddLessonBefore_Click" />
<MenuItem Name="mnuAddLessonAfter"
Header="Add lesson after"
Click="mnuAddLessonAfter_Click"
Visibility="{Binding ElementName=mnuAddLessonBefore, Path=Visibility}" />
Редактировать:
Я заметил это в консоли вывода:
Система.Windows.Ошибка данных: 4: Не удается найти источник для привязки со ссылкой ‘ИмяэлемЕнта=mnuAddLessonBefore’. Выражение привязки:Path=Visibility; DataItem=null; целевым элементом является ‘MenuItem’ (Name=’mnuAddLessonAfter’); целевым свойством является ‘Visibility’ (тип ‘Видимость’)
Комментарии:
1. Это должно сработать, я не вижу ничего плохого. Как вы устанавливаете
mnuAddLessonBefore
видимость в свернутом виде в codebehind вmnuAddLessonBefore_Click
?2. Видимость mnuAddLessonBefore устанавливается в treeViewLesson_MouseRightButtonDown.
Ответ №1:
Привязывать контекстные меню к ним сложно. Они существуют вне визуального дерева вашего элемента управления, следовательно, они не могут найти имя вашего элемента.
Попробуйте этот обходной путь
public Window1()
{
InitializeComponent();
NameScope.SetNameScope(context_menu_lesson, NameScope.GetNameScope(this));
}
Комментарии:
1. Отлично, спасибо, с NameScope. SetNameSpace(… в конструкторе формы привязка работает.