0

Xamarin Forms を使用して iOS および Android アプリケーションを開発しています。TabbedPage 内にある StackLayout にアクセスして、ユーザーがタブを変更するたびに表示または非表示にできるようにしたいのですが、StackLayout にアクセスしようとすると、「これは現在のコンテキストには存在しません」というメッセージが表示されます。これが私の XAML コードと私の CS コードです。

CS

using System;
using System.Collections.Generic;
using Xamarin.Forms;

namespace DebuggerTestAndroidIOS
{
    public partial class PatientTabPage : TabbedPage
    {
        public PatientTabPage ()
        {
            InitializeComponent ();
            ItemsSource = PatientDataModel.tabs;
            //vitalSignsStack.IsVisible = true;

            this.CurrentPageChanged += (object sender, EventArgs e) => {
                var i = this.Children.IndexOf(this.CurrentPage);
                System.Diagnostics.Debug.WriteLine("Page No:"+i);

                if (i == 1){
                    vitalSignsStack.IsVisible = true;
                }           
            };
        }
    }
}

XAML

<?xml version="1.0" encoding="UTF-8"?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            x:Class="DebuggerTestAndroidIOS.PatientTabPage">
    <TabbedPage.ItemTemplate>
        <DataTemplate>
            <ContentPage Title ="{Binding TabName}">
                <!--Parent Wrapper layout-->
                <StackLayout Orientation="Vertical" BackgroundColor="White">
                   <StackLayout x:Name="vitalSignsStack" Orientation="Horizontal" IsVisible="false">
                        <Image Source="VitalSigns.png" HorizontalOptions="Center"/>
                    </StackLayout>
                </StackLayout><!--End parent wrapper-->
            </ContentPage>
        </DataTemplate>
    </TabbedPage.ItemTemplate>
</TabbedPage>
4

3 に答える 3

1

要素は、それを作成したページ (この場合は ContentPage) のコンテキスト内でのみアクセス可能になります。

ContentPage の外部からアクセスする場合は、それを公開する ContentPage にパブリック メソッドまたはプロパティを追加する必要があります。

于 2016-05-03T22:20:33.180 に答える
1

その名前で DataTemplate 内のコントロールにアクセスすることはできません。問題は、それが繰り返されるため、この名前が複数回存在することです。これは許可されていません。

しかし、次のような新しいページを作成してみませんか?

public partial class PatientTabContentPage : TabbedPage
{
    public PatientTabContentPage ()
    {
        InitializeComponent ();
    }
    public HideVitalSignsStack(bool true){
        vitalSignsStack.IsVisible = true;
    }
}

DataTemplate を次のように変更します。

<DataTemplate>
    <PatientTabContentPage Title ="{Binding TabName}">
</DataTemplate>

次に、スタックパネルを非表示にします

this.CurrentPageChanged += (object sender, EventArgs e) => {
    var page = CurrentPage as PatientTabContentPage;
    var i = this.Children.IndexOf(this.CurrentPage);
    System.Diagnostics.Debug.WriteLine("Page No:"+i);    
    if (i == 1){
        page.HideVvitalSignsStack(true);
    }   
};
于 2016-05-03T23:05:21.420 に答える
0

ご尽力いただきありがとうございます。私はそれらを試しましたが、それでも StackLayouts にアクセスできませんでした。コードを少し変更しました。これは非常に役に立ち、すべてが簡単になりました。タブごとに異なるレイアウトを作成する

于 2016-05-06T02:03:38.587 に答える