我'm having a go at Xamarin Forms trying to create my custom ' GroupBox'控件,它只是一个有两行的网格 . 第一行应该只显示一个带 Headers 的框 . Headers 有一个带标签的背景矩形 . 第二行通过 ContentPresenter
显示内容,内容在第二行中显示如下 .
我相信've done the XAML correctly, this is how I' d在 WPF
中执行,它在 GroupBox.xaml
Forms Previewer中显示正常,但当我将其添加到主页面时,Groupbox的内容由于某种原因进入第一行( Headers )而不是第二行在预览器中 .
此外,当我尝试在Android手机上运行时,它看起来像这样:
组框是空白框架,没有背景颜色或文本
这是GroupBox'用户控件'的代码
<?xml version="1.0" encoding="UTF-8"?>
<Grid xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XForms.GroupBox">
<Grid.RowDefinitions>
<RowDefinition Height="0.2*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Frame Grid.Row="0" Grid.RowSpan="2" Margin="1" OutlineColor="AliceBlue"/>
<BoxView Grid.Row="0" BackgroundColor="Red" Margin="1"/>
<Label Grid.Row="0" TextColor="White" Text="Label!" Margin="2" />
<Grid Grid.Row="1">
<ContentPresenter/>
</Grid>
</Grid>
此代码的主要形式为:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XForms;assembly=XForms"
x:Class="XForms.MainPage">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<local:GroupBox Grid.Row="0">
<Label Text="I'm some content 1"/>
</local:GroupBox>
<local:GroupBox Grid.Row="1">
<Label Text="I'm some content 2"/>
</local:GroupBox>
<local:GroupBox Grid.Row="2">
<Label Text="I'm some content 3"/>
</local:GroupBox>
</Grid>
</Grid>
</ContentPage>
在主页XAML中我可以向标签添加网格行,即使内容中没有网格,它也可以在预览器中使用 - 但它在手机上仍然是空白的(这是最重要的) .
<local:GroupBox Grid.Row="0">
<Label Text="I'm some content 1" Grid.Row="1"/>
</local:GroupBox>
1 回答
我不知道
Frame
是什么,但它目前覆盖BoxView
和标签,因此使它们不可见 . 注释Frame
,您将再次看到标签和BoxView
.ContentPresenter
不能像那样工作 . 在Xamarin.Forms中,它通常用于ControlTemplate
. 有关ContentPresenter的使用,请参阅this blog .在您的情况下,如果您希望ContentPresenter工作 . 而不是
Grid
用于GroupBox
,您可以使用ContentView
用于GroupBox
,如下所示:GroupBox.xaml: