Bob*_*ers 3 c# xaml xamarin.forms
我正在通过派生创建自定义控件ContentView
。我的目标是让用户使用该类,就像您期望使用单个内容的任何控件一样:
<local:NewControl>
<Image source="..." />
</local:NewControl>
Run Code Online (Sandbox Code Playgroud)
但是,我希望控件包含一个网格,然后将内容放置在网格中。ContentPresenter
从概念上讲(即忽略不能以这种方式使用的事实),我希望NewControl.xaml
看起来像这样:
<ContentView ...>
<Grid x:Name="HiddenGrid">
<ContentPresenter />
</Grid>
</ContentView>
Run Code Online (Sandbox Code Playgroud)
执行我上面详细介绍的操作会导致HiddenGrid
被 替换Image
,而不是将图像作为 的子项插入可视化树中ContentPresenter
。
目前,我正在通过派生Grid
而不是 来实现我的目标ContentView
,但我想隐藏此实现细节,以便消费者无法干扰Grid
并拥有一个只能分配单个内容的控件。
这看起来应该很简单(并且广泛适用于需要以某种方式修饰内容的各种场景),但我看不出有什么方法可以做到这一点。我是否遗漏了一些明显的东西,这是不可能的,还是只是很难做到并且我需要阅读一些东西(例如控制模板)?
我们可以使用ControlTemplate。Xamarin.Forms 控件模板允许定义 ContentView 派生的自定义控件和 ContentPage 派生页面的视觉结构。
<ContentView.ControlTemplate>
<ControlTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Label Text="Test" Grid.Row="0"></Label>
<ContentPresenter Grid.Row="1"></ContentPresenter>
</Grid>
</ControlTemplate>
</ContentView.ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
沙姆尔
<local:NewControl>
<Label Text= "Test"/>
</local:NewControl>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1168 次 |
最近记录: |