Элемент внутри Flyout в XAML не доступен из кода позади - PullRequest
0 голосов
/ 14 января 2019

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

Я уже искал возможные решения и пробовал следующие вещи: сделал чистую сборку, Restarted 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, но в данный момент я не могу его вызвать.

Я все еще могу вызывать другие элементы снаружи из Flyout, например, "CmbSelectParkhaus".

1 Ответ

0 голосов
/ 14 января 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...