首页 文章

Xamarin表单contentpresenter进入错误行并在电话上清空

提问于
浏览
1

我'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 )而不是第二行在预览器中 .

the content is going into the header

此外,当我尝试在Android手机上运行时,它看起来像这样:

the group boxes are blank frames with no background colour or text

组框是空白框架,没有背景颜色或文本

这是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 回答

  • 3

    我不知道 Frame 是什么,但它目前覆盖 BoxView 和标签,因此使它们不可见 . 注释 Frame ,您将再次看到标签和 BoxView .

    我相信我已经正确地完成了XAML,这就是我在WPF中的表现,它在GroupBox.xaml Forms Previewer中很好地显示,但是当我将它添加到主页面时,Groupbox的内容会进入由于某种原因,预览器中的第一行( Headers )而不是第二行 .

    ContentPresenter 不能像那样工作 . 在Xamarin.Forms中,它通常用于 ControlTemplate . 有关ContentPresenter的使用,请参阅this blog .

    在您的情况下,如果您希望ContentPresenter工作 . 而不是 Grid 用于 GroupBox ,您可以使用 ContentView 用于 GroupBox ,如下所示:

    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class GroupBox : ContentView
    {
        public GroupBox()
        {
            InitializeComponent();
        }
    }
    

    GroupBox.xaml:

    <ContentView xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Demo.GroupBox">
    <ContentView.ControlTemplate>
        <ControlTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="0.2*"/>
                    <RowDefinition Height="1*"/>
                </Grid.RowDefinitions>
                <!--<Frame Grid.Row="0" Grid.RowSpan="2" Margin="1" OutlineColor="AliceBlue"></Frame>-->
                <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>
        </ControlTemplate>
    </ContentView.ControlTemplate>
    

相关问题