#c# #wpf #visual-studio-2013
#c# #wpf #visual-studio-2013
Вопрос:
Я хочу получить элемент управления «textBoxLatitde» в исходном коде.
<Image Name="icon">
<ContextMenu>
<MenuItem>
<MenuItem.Template>
<ControlTemplate>
<Grid>
<TextBlock Name="placeHolderText" Text="Lat :"/>
<TextBox Name="textBoxLatitde" />
</Grid>
</ControlTemplate>
</MenuItem.Template>
</MenuItem>
</ContextMenu>
Комментарии:
1. Вы можете получить объект templete из некоторого элемента управления. Но я с
2. Но я не рекомендую. Потому что это так сложно и грязно. Если вы можете добавить какое-либо событие пользовательского интерфейса в сетку, вы можете использовать элемент управления sender как конкретный тип. И вы также можете получить элементы управления siblings.
Ответ №1:
Попробуйте это:
Grid grid = (icon.ContextMenu.Items[0] as MenuItem).Template.LoadContent() as Grid;
TextBox textBox = grid.Children[1] as TextBox;
Ответ №2:
Вы должны получить доступ к ContextMenu
шаблонам сразу после его загрузки. Итак, добавьте этот код в конструктор вашего Window
:
icon.ContextMenu.Loaded = new RoutedEventHandler(ContextMenuLoaded);
Затем добавьте этот метод к тому же Window
:
private void ContextMenuLoaded(object sender, RoutedEventArgs e)
{
ContextMenu contextMenu = sender as ContextMenu;
MenuItem menuItem = contextMenu.Items[0] as MenuItem;
TextBox textBox = menuItem.Template.FindName("textBoxLatitde", menuItem) as TextBox;
textBox.Text = "Some text";
}
Просто помните, что a ContextMenu
загружается и выгружается каждый раз, когда вы его открываете / закрываете.