4
votes

I'm new to Xamarin development and I'm hopeful there's a quick fix for this seemingly easy issue.

My Environment

  • Xamarin Studio Community on Mac 6.1.3 (build 19)
  • Xamarin.Android 7.0.2.42
  • Xamarin.Ios 10.3.1.7
  • Xcode 8.2.1
  • Mac OSX 10.12.1

My Issue

I have an existing xaml file from my Visual Studio Online repo. I added an x:name attribute called lblSearchText to a label control so I can access it in code behind. Code behind for the xaml allows me to access this control by the name I added without issue. However, when compiling I get

The name ‘lblSearchText’ does not exist in the current context

I’ve confirmed the following

  • Build Action on the XAML file is EmbeddedResource
  • Custom Tool property on the XAML file is MSBuild:UpdateDesignTimeXaml

My XAML EDIT: added full XAML

<?xml version="1.0" encoding="UTF-8" ?>
<common:ContentPage x:Class="MyApp.SearchAuthenticatedPage"
                    xmlns="http://xamarin.com/schemas/2014/forms"
                    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                    xmlns:common="clr-namespace:MyApp.Common;assembly=MyApp.Common"
                    xmlns:commonView="clr-namespace:MyApp.Common.Views;assembly=MyApp.Common"
                    xmlns:help="clr-namespace:MyApp.Helpers;assembly=MyApp"
                    xmlns:helpersCommon="clr-namespace:MyApp.Helpers;assembly=MyApp.Common"
                    xmlns:local="clr-namespace:MyApp;assembly=MyApp"
                    xmlns:sty="clr-namespace:MyApp.Styles;assembly=MyApp">
    <common:ContentPage.Resources>
        <ResourceDictionary>
            <local:DistanceToStringConverter x:Key="DistanceToString" />
            <local:StringToHeaderConverter x:Key="StringToHeader" />
            <local:StringToUpperConverter x:Key="StringToUpper" />
            <local:IsFavoriteToBackgroundColorConverter x:Key="IsFavoriteToBackgroundColor" />
        </ResourceDictionary>
    </common:ContentPage.Resources>
    <RelativeLayout BackgroundColor="White" Padding="0">
        <common:SearchBar x:Name="searchBar"
                          Title="{helpersCommon:Translate searchBarText}"
                          ClickCommand="{Binding SearchCommand}"
                          RelativeLayout.HeightConstraint="{ConstraintExpression Type=Constant, Constant=50}"
                          RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width}"
                          RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=X}"
                          RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Y}" />

        <AbsoluteLayout IsVisible="{Binding IsMapVisible}"
                        RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Constant=-50}"
                        RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width}"
                        RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=X}"
                        RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Y, Constant=50}">
            <commonView:MapView x:Name="map"
                                WidthRequest="500"
                                HeightRequest="500"
                                VerticalOptions="FillAndExpand"
                                AbsoluteLayout.LayoutBounds="1,1,1,1"
                                AbsoluteLayout.LayoutFlags="All"
                                DirectionLocation="{ Binding DirectionLocation}"
                                IsVisible="{Binding IsMapVisible}"
                                Location="{Binding CurrentLocation}"
                                ShowDirection="{ Binding IsShowingDirection}"
                                Source="{Binding GetMapSource}"
                                ZoomToLocation="true" />
            <Button x:Name="getDirectionButton"
                    AbsoluteLayout.LayoutBounds=".28,.33,100,30"
                    AbsoluteLayout.LayoutFlags="PositionProportional"
                    BackgroundColor="Transparent"
                    Text="" />
            <Button x:Name="storeDetailsButton"
                    AbsoluteLayout.LayoutBounds=".70,.33,100,30"
                    AbsoluteLayout.LayoutFlags="PositionProportional"
                    BackgroundColor="Transparent"
                    IsVisible="false"
                    Text="" />
            <Button x:Name="phoneButton"
                    AbsoluteLayout.LayoutBounds=".28,.27,100,20"
                    AbsoluteLayout.LayoutFlags="PositionProportional"
                    BackgroundColor="Transparent"
                    Text="" />
        </AbsoluteLayout>
        <ListView x:Name="list"
                  HeightRequest="300"
                  CachingStrategy="RetainElement"
                  Footer="{Binding .}"
                  HasUnevenRows="true"
                  IsGroupingEnabled="true"
                  IsVisible="{Binding IsListVisible}"
                  ItemsSource="{Binding FinalSearchResult}"
                  RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Constant=-47}"
                  RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width}"
                  RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=X}"
                  RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Y, Constant=47}"
                  SeparatorColor="Transparent"
                  SeparatorVisibility="None">
            <ListView.FooterTemplate>
                <DataTemplate>
                    <ContentView>
                        <Label x:Name="lblSearchText" <!--- My Control --->
                               Margin="13, 10"
                               HorizontalOptions="Center"
                               IsVisible="{Binding IsEmpty}"
                               Style="{x:Static sty:Styles.PatientListBigLabelStyle}"
                               Text="{helpersCommon:Translate searchText}"
                               VerticalTextAlignment="Center" />
                    </ContentView>
                </DataTemplate>
            </ListView.FooterTemplate>
            <ListView.GroupHeaderTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout BackgroundColor="{Binding Favorite, Converter={StaticResource IsFavoriteToBackgroundColor}}" Padding="13,15">
                            <Label Style="{x:Static sty:Styles.DarkLabelStyle}" Text="{Binding GroupName}" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.GroupHeaderTemplate>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid BackgroundColor="{Binding IsFavorite, Converter={StaticResource IsFavoriteToBackgroundColor}}"
                              Padding="13,16"
                              RowSpacing="0">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*" />
                                <RowDefinition Height="5" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="35" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="30" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="100" />
                            </Grid.ColumnDefinitions>
                            <commonView:FavoriteButton Grid.Row="0"
                                                       Grid.Column="0"
                                                       Margin="0,0,7,0"
                                                       ClickCommand="{Binding FavoriteChangedCommand}"
                                                       IsFavorite="{Binding IsFavorite}"
                                                       Style="{x:Static sty:Styles.FavoriteButtonStyle}" />

                            <Label Grid.Row="0"
                                   Grid.Column="1"
                                   FontSize="{x:Static sty:Styles.VeryLargeFontSize}"
                                   Style="{x:Static sty:Styles.DarkBoldLabelStyle}"
                                   Text="{Binding ShoppingCenterName}" />
                            <Label Grid.Row="0"
                                   Grid.Column="2"
                                   FontSize="{x:Static sty:Styles.VeryLargeFontSize}"
                                   Style="{x:Static sty:Styles.DarkBoldRightLabelStyle}"
                                   Text="{Binding DistanceInMilesFromLocation, Converter={StaticResource DistanceToString}}" />
                            <Label Grid.Row="2"
                                   Grid.Column="1"
                                   IsVisible="{Binding IsAddressVisible}"
                                   Style="{x:Static sty:Styles.DarkLabelStyle}"
                                   Text="{Binding Address}" />
                            <commonView:UnderlinedButton Grid.Row="2"
                                                         Grid.RowSpan="3"
                                                         Grid.Column="2"
                                                         HeightRequest="35"
                                                         Command="{Binding ShowDetailCommand}"
                                                         IsVisible="{Binding IsNotSomeMode}"
                                                         Style="{x:Static sty:Styles.ListUnderlinedButtonStyle}"
                                                         Text="{helpersCommon:Translate detailButtonText}"
                                                         TextAligment="TopRight" />
                            <Label Grid.Row="3"
                                   Grid.Column="1"
                                   VerticalOptions="Start"
                                   IsVisible="{Binding IsAddressVisible}"
                                   Style="{x:Static sty:Styles.DarkLabelStyle}"
                                   Text="{Binding Address2}" />
                            <commonView:UnderlinedButton Grid.Row="4"
                                                         Grid.Column="1"
                                                         HeightRequest="35"
                                                         HorizontalOptions="StartAndExpand"
                                                         Command="{Binding CallCommand}"
                                                         Style="{x:Static sty:Styles.ListUnderlinedButtonStyle}"
                                                         Text="{Binding Phone}"
                                                         TextAligment="TopLeft" />
                            <commonView:ExtendedButton Grid.Row="4"
                                                       Grid.RowSpan="2"
                                                       Grid.Column="2"
                                                       HorizontalOptions="End"
                                                       VerticalOptions="Center"
                                                       Command="{Binding SomeCommand}"
                                                       IsVisible="{Binding IsSomeMode}"
                                                       Style="{x:Static sty:Styles.ActionButtonStyle}"
                                                       Text="{helpersCommon:Translate ListSomeButtonText}">
                                <commonView:ExtendedButton.FontSize>
                                    <OnPlatform x:TypeArguments="x:Double"
                                                Android="11"
                                                iOS="13" />
                                </commonView:ExtendedButton.FontSize>
                            </commonView:ExtendedButton>
                           </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </RelativeLayout>
</common:ContentPage>

My Code Behind EDIT - added full code

using System.Linq;
using Xamarin.Forms;
using static MyApp.Helpers.UIHelper;

namespace MyApp
{
    public partial class SearchAuthenticatedPage : global::MyApp.Common.ContentPage
    {
        public SearchAuthenticatedPage()
        {
            InitializeComponent();
            lblSearchText.Text = "hello world!";
        }

        public bool IsMapShowing { get; set; }

        protected override void OnBindingContextChanged()
        {
            base.OnBindingContextChanged();
            var vm = BindingContext as BaseListViewModel;
            if (vm != null) {
                if (!ToolbarItems.Any()) {
                    SetSwitchToolbarItem();
                }
                vm.SetSwitchToolbarItem = SetSwitchToolbarItem; 
            }
            getDirectionButton.IsVisible = false;
            storeDetailsButton.IsVisible = false;
            phoneButton.IsVisible = false;

            map.CalloutShownCommand = new Command(OnShowCallout);
            map.CalloutHidedCommand = new Command(OnHideCallout);
        }

        void OnHideCallout()
        {
            if (Device.OS == TargetPlatform.iOS) {
                return;
            }
            getDirectionButton.IsVisible = false;
            phoneButton.IsVisible = false;
        }

        void OnShowCallout()
        {
            if (Device.OS == TargetPlatform.iOS) {
                return;
            }
            getDirectionButton.Command = map.ShowDirectionsCommand;
            phoneButton.Command = map.PhoneCallCommand;
            getDirectionButton.IsVisible = true;
            phoneButton.IsVisible = true;
        }

        public void SetSwitchToolbarItem(bool isMapClicked = false)
        {
            var switchCommand = (BindingContext as BaseListViewModel)?.ChangeViewCommand;
            var switchItem = ToolbarItems.FirstOrDefault(i => i.Priority == 0);
            if (switchItem != null) {
                switchItem.Text = isMapClicked ? Localize("titleListView") : Localize("titleMapView");
                switchItem.Command = switchCommand;
            }
            else {
                ToolbarItems.Add(new ToolbarItem { Text = Localize("titleMapView"), Command = switchCommand });
            }
        }
    }
}
1
make sure lblSearchText exists in the InitializeComponent method definitionEhsan Sajjad
The label control exists in the XAML as part of a listview. Does it need to exist elsewhere in the XAML file?Stinky Towel
Please show the definition of your whole page in XAML and code-behindGerald Versluis
Edited post with full xaml/code.Stinky Towel
I think it is because it's in a template, so it will be repeated for each item in the list and they would all have the same name. Is there any particular reason you want to access it like this? Why not use binding to a property of the objects that you put in the ItemsSource?Gerald Versluis

1 Answers

2
votes

I think it is because it's inside a template, so it will be repeated for each item in the list and they would all have the same name. This is not possible.

Also, is there any particular reason you want to access it like this? Why not use binding to a property of the objects that you put in the ItemsSource?