У меня есть mainPage.xaml и userControl.xaml.I называется userControl в mainPage. mainPage имеет Grid с именем «grd», а userControl имеет кнопку «btn». Теперь, когда я нажму на кнопку, щелкните событие userControl. В этом случае я хочу скрыть Grid (это в mainPage.xaml). Как я могу получить доступ к элементам управления mainPage в userControls?Доступ к основному пользовательскому интерфейсу страницы
ответ
Вы можете получать доступ в данный момент отображается страница с помощью этого кода:
var mainPage = (PhoneApplicationPage)((App)Application.Current).RootFrame.Content;
Заканчивать мой ответ, что ОП хотел установить видимость AppBar, мой ответ будет работать на Grid
также.
Не могли бы вы объяснить, как это работает? var isOpen = ((AppBar) ((BlankPage4) ((Grid) this.Parent) .Parent) .BottomAppBar) .IsOpen; –
Если вы используете MVVM (как указано в вашем комментарии к @ har07 Ответим) вы не должны скрыть сетку в главной странице с помощью обработчика событий на странице управления пользователями. Вместо этого вы должны привязать команду к кнопке на странице управления. Эта команда должна изменить модель представления главной страницы, и это изменение должно быть уведомлено этой моделью просмотра на главной странице.
В следующем примере я использую MVVM Light
, но, возможно, другие библиотеки MVVM работают почти одинаково.
Добавить объект в модель представления вашей главной страницы:
public class MainViewModel : BaseViewModel
{
…your code here
private bool _isValid;
public bool IsValid
{
get
{
return _isValid;
}
set
{
_isValid = value;
RaisePropertyChange("IsValid");
}
}
}
В главных страницах связываются Visibility
с IsValid
.
<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
…content here
</Grid>
Теперь сетка видна, если IsValid - истина.
Добавить команду в модели представления пользовательского элемента управления:
public class UserControlViewModel : BaseViewModel
{
…your code here
public RelayCommand InvalidateGridCommand { get; private set; }
public UserControlViewModel()
{
InvalidateGridCommand = new RelayCommand(() => InvalidateGrid());
}
private void InvalidateGrid()
{
var mainvm = SimpleIoc.Default.GetInstance(MainViewModel);
mainvm.IsValid = false;
}
}
На странице управления пользователя привязать Button
к Command
:
<Button Command="{Binding InvalidateGridCommand}">
Invalidate
</Button>
Теперь, нажав на кнопку будет установлен IsValid
на MainViewModel
на false, что, в свою очередь, скроет Grid
.
Для Windows Phone 8 попробовать это:
(((Application.Current as App).RootVisual as PhoneApplicationFrame).Content as Page)
Я пришел сюда в поисках ответа на этот вопрос, и после некоторых попыток я мог получить доступ к главной странице моего Windows Phone 8.1 приложение с помощью:
var mainPage = (MainPage)(Window.Current.Content as Frame).Content
.
Чтобы получить доступ к элементам управления, указанным в MainPage, вам необходимо также указать их x:Name
и изменить их x:FieldModifier
на "Internal"
или "Public"
.
- 1. Доступ к пользовательскому интерфейсу формы?
- 2. Как программно получить доступ к основному интерфейсу
- 3. Метод BackgroundWorker и Delegate не возвращается к основному пользовательскому интерфейсу
- 4. Доступ к пользовательскому интерфейсу без зависания
- 5. Доступ к пользовательскому интерфейсу из другого класса
- 6. Доступ к пользовательскому интерфейсу в nunit
- 7. Доступ к пользовательскому интерфейсу от службы зависимостей
- 8. Пояснения к пользовательскому интерфейсу
- 9. Доступ к пользовательскому интерфейсу без доступа к базе данных
- 10. Работа Eclipse с доступом к пользовательскому интерфейсу
- 11. Почему новые потоки могут получить доступ к пользовательскому интерфейсу?
- 12. Как получить доступ к пользовательскому интерфейсу от CFRunLoopRun в ios
- 13. Как получить доступ к пользовательскому интерфейсу скорости Velocity Apache Solr
- 14. Доступ к пользовательскому интерфейсу родительского окна от ребенка Page
- 15. Не удается получить доступ к пользовательскому интерфейсу от делегата?
- 16. Как получить доступ к пользовательскому интерфейсу пользовательского шаблона?
- 17. Как получить доступ к угловому пользовательскому интерфейсу бутстрапа от контроллера
- 18. Доступ к пользовательскому интерфейсу с помощью async/wait с Mvvm
- 19. Доступ к пользовательскому интерфейсу (свойство controlource) vs Производительность VBA
- 20. Как получить доступ к пользовательскому интерфейсу Kubernetes через браузер?
- 21. Доступ к пользовательскому интерфейсу JQuery с использованием примитивов
- 22. Доступ к пользовательскому интерфейсу WinForm от клиента службы поддержки Rhino
- 23. доступ к пользовательскому управлению с главной страницы
- 24. Альтернативы пользовательскому интерфейсу Kendo?
- 25. Тема: Возврат к пользовательскому интерфейсу - Не создана?
- 26. Безопасное подключение к пользовательскому интерфейсу Android
- 27. Перейдите к пользовательскому интерфейсу, используя только клавиатуру
- 28. Применение стилей к моему титановому пользовательскому интерфейсу
- 29. конструирование отношения к пользовательскому интерфейсу GameController
- 30. Что вызывает привязку к пользовательскому интерфейсу?
Событие доступно в userControl; будет ли это работать? –
определенно, уже пробовал это. 'Application.Current..' доступен с любого элемента управления/страницы вашего приложения Windows Phone и возвращает тот же результат. – har07
Я не могу использовать его. Код, который вы написали, предназначен для wp7. В wp8 я не могу найти .RootFrame.Content. Пожалуйста, объясните –