我不喜欢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”
答案 0 :(得分:0)
问题是您要访问的是控件模板中的视图,而这只是一种资源。所以基本上,toArray()
实际上不存在&#34;存在&#34;。一旦你在某个地方使用模板,那么它才真正成为现实。如果你想在多个地方复制一些逻辑,自定义控件可能更适合。
当实际使用模板时,您可以通过浏览可见树并在其中搜索具有此名称的控件来访问HeaderSearch
。您可以找到一些用于此目的的示例方法here。