Xamarin,具有布局的自定义控件,在特定位置接受可绑定内容

Xamarin,具有布局的自定义控件,在特定位置接受可绑定内容,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我需要创建一个标准的布局,我可以在许多页面上使用,但传递的内容显示在里面。。。我的成功有限 下面是我如何调用自定义控件 <?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.c

我需要创建一个标准的布局,我可以在许多页面上使用,但传递的内容显示在里面。。。我的成功有限

下面是我如何调用自定义控件

<?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:control="clr-namespace:myApp"
             x:Class="myApp.MainPage">
    <StackLayout>

        <control:CustomPopupLayoutControl 
             BackgroundColor="LightGreen">

            <control:CustomPopupLayoutControl.Content>

                <Button Text="Hello"  />
                <!-- lots of other controls, buttons, labels etc, layout -->
            </control:CustomPopupLayoutControl.Content>

        </control:CustomPopupLayoutControl>

    </StackLayout>
</ContentPage>
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="myApp.CustomPopupLayoutControl"
             x:Name="CustomPopupLayouts">
    <ContentView.Content>
        <StackLayout BackgroundColor="LightBlue" Margin="30">

            <Button Text="Close" /><!-- important-->
            <!-- lots of other layout -->
            <StackLayout BackgroundColor="Red" x:Name="Inner">

            </StackLayout>
         </StackLayout>
    </ContentView.Content>
</ContentView>

所以你可以看到这里我不想显示一些内容

这是我的自定义控件

<?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:control="clr-namespace:myApp"
             x:Class="myApp.MainPage">
    <StackLayout>

        <control:CustomPopupLayoutControl 
             BackgroundColor="LightGreen">

            <control:CustomPopupLayoutControl.Content>

                <Button Text="Hello"  />
                <!-- lots of other controls, buttons, labels etc, layout -->
            </control:CustomPopupLayoutControl.Content>

        </control:CustomPopupLayoutControl>

    </StackLayout>
</ContentPage>
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="myApp.CustomPopupLayoutControl"
             x:Name="CustomPopupLayouts">
    <ContentView.Content>
        <StackLayout BackgroundColor="LightBlue" Margin="30">

            <Button Text="Close" /><!-- important-->
            <!-- lots of other layout -->
            <StackLayout BackgroundColor="Red" x:Name="Inner">

            </StackLayout>
         </StackLayout>
    </ContentView.Content>
</ContentView>

所以我想在内部堆栈布局中显示我的hello按钮,我还需要绑定才能工作

所以最后一页应该看起来像

<page>

  <StackLayout BackgroundColor="LightBlue" Margin="30">
    <Button Text="Close" /><!-- important-->

    <StackLayout BackgroundColor="Red">
      <button text="Hello">
    </StackLayout>
  <StackLayout>

</page>

由于您在自定义控件中定义了一个按钮,因此只需将要显示在按钮上的标题从ContentPage传递到自定义控件即可

在CustomPopulLayoutControl.xaml中 在ContentPage中 您可以直接设置按钮的标题,也可以使用数据绑定

<control:CustomPopupLayoutControl ButtonTitle = "Hello World!" BackgroundColor="LightGreen" /  >

我找到了一个解决方案:)



您可以发布解决方案并接受它,或者用您的解决方案编辑我的答案。
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="myapp.CustomPopupLayoutControl"
             x:Name="CustomPopupLayouts">
    <ContentView.ControlTemplate>
        <ControlTemplate>
            <StackLayout BackgroundColor="LightBlue" Margin="30">

                <Frame CornerRadius="5" Margin="20" HasShadow="False" 
                       BackgroundColor="Red">
                    <StackLayout>
                        <Button Text="Close" 
                           Command="{TemplateBinding 
                           Parent.BindingContext.NavigateCommand}" />
                        <!-- important-->

                        <ContentPresenter />
                    </StackLayout>
                </Frame>
            </StackLayout>
        </ControlTemplate>
    </ContentView.ControlTemplate>
</ContentView>
<?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:control="clr-namespace:myapp"
             x:Class="myapp.MainPage">
    <StackLayout>

        <control:CustomPopupLayoutControl BackgroundColor="LightGreen">

            <StackLayout>
                <Button Text="Hello" Command="{Binding NavigateCommand}" />

                <Button Text="Goodbye"  />
            </StackLayout>
        </control:CustomPopupLayoutControl>

    </StackLayout>
</ContentPage>