Xamarin:名字' x'在当前上下文中不存在

时间:2016-12-29 14:08:02

标签: c# xaml xamarin xamarin.forms

我是Xamarin开发的新手,我希望能快速解决这个看似简单的问题。

我的环境

  • Mac 6.1.3(版本19)上的Xamarin Studio社区
  • Xamarin.Android 7.0.2.42
  • Xamarin.Ios 10.3.1.7
  • Xcode 8.2.1
  • Mac OSX 10.12.1

我的问题

我的Visual Studio Online repo中有一个现有的xaml文件。我将一个名为 lblSearchText x:name 属性添加到标签控件中,以便我可以在后面的代码中访问它。 xaml 后面的代码允许我通过我添加的名称访问此控件而不会出现问题。但是,在编译时我得到了

  

当前上下文中不存在名称“lblSearchText”

我已经确认以下

    XAML文件中的
  • 构建操作 EmbeddedResource
  • XAML文件中的
  • 自定义工具属性为 MSBuild:UpdateDesignTimeXaml

我的XAML 编辑:添加了完整的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>

我的代码背后编辑 - 添加完整代码

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 个答案:

答案 0 :(得分:1)

我认为这是因为它在一个模板中,所以它将重复列表中的每个项目,它们都将具有相同的名称。这是不可能的。

此外,您是否有任何特殊原因想要像这样访问它?为什么不使用绑定到放在ItemsSource

中的对象的属性