所以我试图设计一个页面,它可以有两个不同的外观,这取决于在运行时定义的状态。我没有太多的经验与MAUI或XAML一般,但我试图做正确的方式,所以这里是我所做的:
- 我在ContentPage的资源中定义了两个ControlTemplate元素。
- 我在ContentPage的内容中定义了公共UI,并定义了一个ContentView元素,它使用两个ControlTemplate元素之一的内容,该元素在页面的xaml.cs代码文件中设置,具体取决于绑定到它的ViewModel的状态。
以下是页面中的简化XAML代码:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:local="clr-namespace:MyApp"
>
<ContentPage.Resources>
<ControlTemplate x:Key="template1">
<Grid RowDefinitions="*,*,*">
<Label Text="TEMPLATE1 UI..."/>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="template2">
<Grid RowDefinitions="*,*,*">
<Label Text="TEMPLATE2 UI..."/>
<!-- I need to access this element from MainPage.xaml.cs -->
<local:MyCustomControl x:Name="myCustomControl"/>
</Grid>
</ControlTemplate>
</ContentPage.Resources>
<Grid RowDefinitions="*, *, *">
<!-- Here goes my common UI -->
<Label Grid.Row="1" Text="COMMON UI..."/>
<!-- Here goes one of my two ControlTemplate UI -->
<ContentView x:Name="contentFromTemplate" Grid.RowSpan="3" Grid.ColumnSpan="3"/>
</Grid>
字符串
现在你可以看到,在“template 2”ControlTemplate中,有一个MyCustomControl元素。我试图从页面的cs代码访问这个元素,但没有任何成功。我知道,如果ControlTemplate要应用于页面,我可以使用GetTemplateChild方法访问它,但这在我的情况下不起作用,因为ControlTemplate应用于页面中的ContentView。
->如何从MainPage.xaml.cs访问“myCustomControl”元素?
我不确定我的方法是正确的,虽然,我感谢任何输入一个更好的,非常感谢您花时间阅读。
1条答案
按热度按时间3hvapo4f1#
我试图尽可能避免重复UI代码,我的两个UI有很多共同点,只是一些元素会根据我的ViewModel的状态在页面上的不同位置。
作为总结,我会给出一个答案。
对于这个问题,有几种方法可以实现这一点。
1.由于这两个UT有很多共同之处,一个常见的方法是基于视图模型显示和隐藏一些元素。
例如,您可以为视图设置属性
IsVisible
:字符串
2.另一种方法是根据ViewModel的状态使用两个单独的页面,就像H.A.H提到的那样。