在App.xaml.cs中访问App.xaml中创建的搜索栏

时间:2018-02-05 14:38:59

标签: xamarin xamarin.forms

我不喜欢Android上导航栏/标题栏的高度,因此在App.xaml的ControlTemplate中构建了一个自定义栏。 它还包括一个搜索栏,当我尝试从App.xaml.cs访问此搜索栏(名为“x:Name =”HeaderSearch“)时,它不起作用。 代码如下;

的App.xaml

< x:Class="AltusApp.App">
<Application.Resources>

<!-- Application resource dictionary -->
<ResourceDictionary>
    <ControlTemplate x:Key="HomePageTemplate">

        <!--Begin Header-->
        <Grid>
            <Grid.RowDefinitions>
                 <RowDefinition Height="8*"/>
                 <RowDefinition Height="92*"/>
            </Grid.RowDefinitions>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Grid Grid.Row="0" Grid.Column="0" BackgroundColor="#bababa">
                <Image Source="altuslogo.jpg" WidthRequest="23" HeightRequest="23" HorizontalOptions="End" VerticalOptions="Start" Margin="0,5,5,0"/>

                <Image Source="home.png" WidthRequest="20" HeightRequest="20" HorizontalOptions="Start" VerticalOptions="Start" Margin="5,5,0,5">
                    <Image.GestureRecognizers>
                        <TapGestureRecognizer Tapped="OnHomeButtonPressed"/>
                    </Image.GestureRecognizers>
                </Image>

                <Image Source="back.png" WidthRequest="20" HeightRequest="20" HorizontalOptions="Start" VerticalOptions="Start" Margin="35,5,0,0">
                    <Image.GestureRecognizers>
                        <TapGestureRecognizer Tapped="OnBackButtonPressed"/>
                    </Image.GestureRecognizers>
                </Image>

                <SearchBar x:Name="HeaderSearch" SearchButtonPressed="searchenter" HorizontalOptions="Start" VerticalOptions="Start" Margin="40,5,25,5"/>

                <ListView x:Name="NavListView" />


            </Grid>
        <!-- End Header -->

        <!-- Begin Content -->
            <ContentPresenter VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Grid.Column="0" Grid.Row="1"/>
         <!-- End Content -->
        </Grid>

    </ControlTemplate>

</ResourceDictionary>

`

for App.xaml.cs我试过

public void HeaderSearch_searchenter(object sender, EventArgs e)
    { String Keyword = AltusApp.App.HeaderSearch.text; }
public void HeaderSearch_searchenter(object sender, EventArgs e)         
    {String Keyword = HeaderSearch.text; }

我得到'App'不包含'HeaderSearch'的定义

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

1 个答案:

答案 0 :(得分:0)

问题是您要访问的是控件模板中的视图,而这只是一种资源。所以基本上,toArray()实际上不存在&#34;存在&#34;。一旦你在某个地方使用模板,那么它才真正成为现实。如果你想在多个地方复制一些逻辑,自定义控件可能更适合。

当实际使用模板时,您可以通过浏览可见树并在其中搜索具有此名称的控件来访问HeaderSearch。您可以找到一些用于此目的的示例方法here