Элемент внутри Flyout в XAML недоступен из Code Behind

Я работаю над приложением UWP, и мне нужна помощь с Flyout. У меня есть Flyout в моем XAML с несколькими элементами TextBlock, но, похоже, я не могу вызывать эти элементы в Code Behind. Каждый раз, когда я пытаюсь это сделать, я получаю исключение «Имя TB не существует в текущем контексте».

Я уже искал возможные решения и пробовал следующее: сделал чистую сборку, перезапустил VS 2017, очистил папку bin вручную, а затем попытался восстановить

Но, похоже, ничего не работает, и я нахожусь в точке, где не знаю, что делать.

<Page
    x:Class = "FuhrparkUWP.Pages.Parkhaeuser"
    xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:converter = "using:FuhrparkUWP.Converter"
    xmlns:data = "using:FuhrparkStructureUWP.Model"
    mc:Ignorable = "d"
    Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Page.Resources>
        <converter:PassendFuerToStringConverter x:Key = "PassendFuerToStringConverterKey"></converter:PassendFuerToStringConverter>
        <converter:BelegtStatusToImageConverter x:Key = "BelegtStatusToImageConverterKey"></converter:BelegtStatusToImageConverter>
    </Page.Resources>

    <Grid>
        <ComboBox Name = "CmbSelectParkhaus" Header = "Parkhaus" HorizontalAlignment = "Center" VerticalAlignment = "Top" Width = "200" SelectionChanged = "CmbSelectParkhaus_SelectionChanged"/>

        <GridView ItemsSource = "{x:Bind Parkplaetze}" Name = "ContentGrid" HorizontalAlignment = "Center" VerticalAlignment = "Top" Margin = "0, 100, 0, 0">
            <GridView.ItemTemplate>
                <DataTemplate x:Name = "ImageTextDataTemplate" x:DataType = "data:Parkplatz">
                    <StackPanel Height = "280" Width = "180" Margin = "12" Tapped = "Content_Tapped">
                        <Image Source = "{Binding Path=IstBelegt, Converter = {StaticResource BelegtStatusToImageConverterKey}}" Height = "180" Width = "180" Stretch = "UniformToFill"/>
                        <StackPanel Margin = "0,12">
                            <TextBlock Text = "{x:Bind FahrzeugKennzeichen}"/>
                            <TextBlock Text = "{Binding Path=PassendFuer, Converter = {StaticResource PassendFuerToStringConverterKey}}" Style = "{ThemeResource CaptionTextBlockStyle}" Foreground = "{ThemeResource SystemControlPageTextBaseMediumBrush}"/>
                        </StackPanel>
                        <FlyoutBase.AttachedFlyout>
                            <Flyout>
                                <StackPanel>
                                    <Image Source = "/Assets/Images/ParkplatzFrei.png" Width = "180" Height = "180"></Image>
                                    <TextBlock Name = "TB"></TextBlock>
                                    <TextBlock Text = "Passend für: LKW, PKW, Motorrad"></TextBlock>
                                    <TextBlock Text = "Belegt durch: FREI"></TextBlock>
                                </StackPanel>
                            </Flyout>
                        </FlyoutBase.AttachedFlyout>
                    </StackPanel>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>
    </Grid>
</Page>

Я ожидаю, что вызову TB.Text = "xyz", например, со страницы Code Behind, но в настоящий момент я не могу это вызвать.

Я все еще могу вызывать другие элементы вне всплывающего окна, например, «CmbSelectParkhaus».

Возможный дубликат Как найти контроль на табличке с данными tabitem wpf

MickyD 14.01.2019 02:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
207
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете обрабатывать вещи внутри DataTamplate, они не являются фактическими объектами пользовательского интерфейса, они являются шаблонами.

Предполагая, что вы хотите добиться одинакового доступа ко всем элементам GridView, вам необходимо присоединить свойства зависимости и либо создать программные привязки для PrepareContainerForItemOverride, либо для соответствующих выражений xaml "{Привязка}".

Это просто открывает совершенно новую кроличью нору, особенно если вы не знаете хотя бы об одной вещи, о которой я упоминал до сих пор, но вы можете просто искать слова, выделенные жирным шрифтом, одно за другим.

хорошо, затем поместите всплывающее окно на <Page.Resources> и покажите его из кода, например Myflyout.ShowAt (некоторый элемент)

Xeorge Xeorge 13.01.2019 22:31

Я не видел, чтобы все было внутри таблички с данными, вам нужно будет использовать свойство зависимости для достижения широкого таргетинга привязки

Xeorge Xeorge 13.01.2019 22:34

Перемещение его в <Page.Resources> и удаление FlyoutBase.AttachedFlyout сделали это! Теперь я могу вызывать элементы внутри него! Спасибо! Вы знаете причину проблемы?

Capt.Pie 13.01.2019 22:39

Я отредактировал его в своем первоначальном ответе, объяснив, почему то, что вы пытаетесь, не сработало.

Xeorge Xeorge 13.01.2019 22:43

Спасибо, по крайней мере, первое, что мне кажется, имеет смысл, если я задумаюсь над этим. Но я посмотрю и другие вещи, о которых вы упомянули. Здесь для обучения.

Capt.Pie 13.01.2019 22:46
«Вы не можете обрабатывать вещи внутри DataTamplate, они не являются фактическими объектами пользовательского интерфейса» - неверно. Вы можете запрос для элемента, выполнив поиск в визуальном дереве для определенного типа в время выполнения при создании экземпляров шаблонов данных. stackoverflow.com/questions/974598/…
MickyD 14.01.2019 02:53

... или stackoverflow.com/questions/44492970/…

MickyD 14.01.2019 02:58

Другие вопросы по теме