这是我的.net maui项目ResourceDictionary。我在这里创建了ControlTemplate来全局使用它。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:ctrls="clr-namespace:Mobile.UI.Core.Controls;Mobile.UI.Core"
x:Class="Mobile.UI.Core.Resources.CommonStyles">
<!-- ControlTemplate -->
<ControlTemplate x:Key="EntryFieldTemplate">
<StackLayout
ClassId="_entryFieldLayout"
HorizontalOptions="{TemplateBinding Path=HorizontalOptions}"
Orientation="Vertical"
VerticalOptions="{TemplateBinding Path=VerticalOptions}"
WidthRequest="{TemplateBinding Path=WidthRequest}">
<Label
x:Name="_entryFieldLabel"
AutomationId="_entryFieldLabel"
Style="{TemplateBinding Path=LabelTextStyle}"
Text="{TemplateBinding Path=LabelText}" />
<BoxView
AutomationId="BoxViewPlaceholder"
Style="{DynamicResource Key=LabeledFieldPlaceholderBoxViewStyle}" />
<Entry
x:Name="_entryFieldEntry"
AutomationId="_entryFieldEntry"
HeightRequest="25"
Text="{TemplateBinding Path=Text, Mode=TwoWay}" />
</StackLayout>
</ControlTemplate>
</ResourceDictionary>
我想使用c#代码从自定义控件类访问具有x:Name =“_entryFieldEntry”的Entry控件。
我可以使用以下代码访问ControlTemplate:
var controlTemplate = Application.Current.Resources.TryGetValue("EntryFieldTemplate",
out var controlTemplate);
我们不能直接使用Resources.TryGetValue()
进行Entry控制,因为没有x:Key
属性可供声明。
我想访问我在collectionView中获取的ControlTemplate的CollectionItems。
我做了研发,但没有找到任何解决方案,以访问进入控制。我尝试使用FindByName()方法,但它不工作。
有人知道怎么做吗?任何形式的帮助都将不胜感激。
2023年5月5日更新:
我能够使用代码访问ControlTemplate,我可以看到我所采取的控件正在显示在其中,但我无法访问它。
var entryFieldTemplate = Application.Current.Resources.MergedDictionaries.
FirstOrDefault(rd => rd.ContainsKey("EntryFieldTemplate"));
var template = (ControlTemplate)entryFieldTemplate["EntryFieldTemplate"];
var collectionView = template.LoadTemplate.Target;
当试图从collectionView访问node时,我没有得到任何方法。它只显示了五个选项:
- 等于
- GetHasCode
- GetType
- LoadFromXaml<>
- ToString
1条答案
按热度按时间ztigrdn81#
示例化控件模板后,将调用模板的OnApplyTemplate方法。然后你可以使用GetTemplateChild方法来获取命名的控件。
有关更多信息,您可以参考从模板获取命名元素。