gpt4 book ai didi

c# - Xamarin.Forms FindByName() 总是返回 null

转载 作者:行者123 更新时间:2023-11-30 20:17:58 25 4
gpt4 key购买 nike

我有一个带有 ItemTemplate 的 Xamarin.Forms ListView。 ItemTemplate 包含一个名为“myEntry”的条目控件。每次选择一个项目时,我都想将焦点设置到条目控件上。在我的 xaml.cs ListView_ItemSelected 事件中,listView.FindByName("myEntry") 方法始终返回 null:

private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var lv = sender as ListView;
if (lv != null)
{
var entry = lv.FindByName<Entry>("myEntry");
if (entry != null)
entry.Focus();
}
}

XAML:

<ListView ItemsSource="{Binding ArtikelListe}"
Header=""
HasUnevenRows="True"
ItemSelected="ListView_ItemSelected"
ItemTapped="ListView_ItemTapped">

<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250*"/>
<ColumnDefinition Width="150*"/>
<ColumnDefinition Width="100*"/>
<ColumnDefinition Width="100*"/>
<ColumnDefinition Width="100*"/>
<ColumnDefinition Width="75*"/>
<ColumnDefinition Width="75*"/>
<ColumnDefinition Width="250*"/>
</Grid.ColumnDefinitions>

<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<Label Text="{Binding Bezeichnung}"/>
<Label Grid.Column="1" Text="{Binding ArtikelNr}"/>
<Label Grid.Column="2" Text="{Binding KatalogNr}"/>
<Label Grid.Column="3" Text="{Binding Lagerplatz}"/>
<Label Grid.Column="4" Text="{Binding Mengeneinheit}"/>
<Label Grid.Column="5" Text="{Binding Sollbestand}"/>
<Entry x:Name="myEntry" Grid.Column="6" VerticalOptions="StartAndExpand" Text="{Binding AktuellerBestand}"/>
<Label Grid.Column="7" Text="{Binding Kommentar}"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

我还尝试从我的 xaml 中查找其他控件,但它始终为空。我做错了什么还是这是一个错误?

最佳答案

警告:你不应该使用 FindByName<>在您的任何代码中。而您尝试做的事情将使用 Binding 来完成。但我还是要回答。

myEntry是 ListView 单元格模板的一部分。试图找到 lv.FindByName<Entry>("myEntry")返回 null,因为另一个选择将返回 ALL myEntry所有细胞。

为什么返回 null ?因为你在不同的地方 NameScope秒。 Xaml 解析器创建一个 NameScope文件中的每个 Xaml 根对象,然后是 DataTemplates 的不同 NameScopes。

如果你想关注myEntry事件单元格。您必须找到选定的单元格,然后对该单元格使用 FindByName。

但是,在模板化控件中,没有简单的方法来 Hook 实际的单元格。这就是为什么我以警告开始这个答案。再读一遍。

关于c# - Xamarin.Forms FindByName() 总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42853489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com