Работает нормально. Спасибо

ользовал сегментированный контроль в моем приложении. Я не знаю, как добавить две страницы контента в элемент управления Segment, как страницу с вкладками. Я приложил образец файла. Пожалуйста, дайте любое предложениеСсылка для примера приложения

Образец кода:

public partial class SamplePage : ContentPage
{

    SegmentedControl segControl;
    SegmentedControlOption optionOne;
    SegmentedControlOption optionTwo;

    public SamplePage()
    {
        segControl = new SegmentedControl();
        optionOne = new SegmentedControlOption();
        optionTwo = new SegmentedControlOption();            

        optionOne.Text = "One";
        optionTwo.Text = "Two";                  

        segControl.Children.Add(optionOne);
        segControl.Children.Add(optionTwo);

        var stack = new StackLayout()
        {
            VerticalOptions = LayoutOptions.StartAndExpand,
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            Children = { segControl }
        };

        this.Content = stack;

    }       
}

Снимок экрана прилагается

 achu04 дек. 2017 г., 11:40
Спасибо за ваше предложение
 SushiHangover04 дек. 2017 г., 11:30
Включите соответствующий код непосредственно в ваш вопрос, а не как внешнюю ссылку.

Ответы на вопрос(1)

Решение Вопроса

Мы не можем поставитьContentPage внутри другогоContentPage

Лучше использоватьContentView вместоContentPage

Grid более рекомендуется в этом сценарии, так как он заполняет весь экран.

использованиеValueChanged событие для динамического изменения вида.

Код:

страница

public partial class SegmentedAppPage : ContentPage
{
    SegmentedControl segControl;      
    SegmentedControlOption scOptionOne;
    SegmentedControlOption scOptionTwo;

    Grid grid;

    View1 view1 = new View1();
    View2 view2 = new View2();

    public SegmentedAppPage()
    {
        InitializeComponent();

        segControl = new SegmentedControl();
        segControl.SelectedValue = "One";
        scOptionOne = new SegmentedControlOption();
        scOptionTwo = new SegmentedControlOption();            

        scOptionOne.Text = "One";
        scOptionTwo.Text = "Two";

        segControl.Children.Add(scOptionOne);
        segControl.Children.Add(scOptionTwo);

        grid = new Grid();
        grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) });
        grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });

        grid.Children.Add(segControl, 0, 0);
        grid.Children.Add(view1, 0, 1);

        this.Content = grid;

        segControl.ValueChanged += SegControl_ValueChanged;
    }

    private void SegControl_ValueChanged(object sender, EventArgs e)
    {
        SegmentedControl control = sender as SegmentedControl;
        if(control.SelectedValue is "One")
        {
            grid.Children.Remove(view2);
            grid.Children.Add(view1,0,1);  //This line 
        }
        else if (control.SelectedValue is "Two")
        {
            grid.Children.Remove(view1);
            grid.Children.Add(view2, 0, 1); //This line 
        }
        this.Content = grid;
    }
}

ContentView

public class View1 : ContentView
{
    public View1()
    {
        Content = new StackLayout
        {
            BackgroundColor = Color.Green,
            Children = {
                new Label { Text = "View1" }
            }
        };
    }
}

Чтобы установить значение по умолчанию для segmentedControl, измените код вSegmentedControlRenderers

protected override void OnElementChanged(ElementChangedEventArgs<SegmentedControl> e)
{
    base.OnElementChanged(e);

    var segmentedControl = new UISegmentedControl();

    for (var i = 0; i < e.NewElement.Children.Count; i++)
    {
        segmentedControl.InsertSegment(e.NewElement.Children[i].Text, i, false);
    }

    segmentedControl.ValueChanged += (sender, eventArgs) => {
        e.NewElement.SelectedValue = segmentedControl.TitleAt(segmentedControl.SelectedSegment);
    };
    segmentedControl.SelectedSegment = 0; // add this line
    SetNativeControl(segmentedControl);
}
Контрольная работа

 achu05 дек. 2017 г., 09:33
Работает нормально. Спасибо
 achu05 дек. 2017 г., 07:55
Привет, На странице появляются View1 и View2 работает нормально. но я нажимаю «Один» из «Два», тексты View2 и View1 переопределяются. Сейчас я прикрепил скриншот.
 Cole Xia - MSFT05 дек. 2017 г., 08:05
Вы полностью копируете мой код? Проверьте эту строку:grid.Children.Remove(view2);
 achu05 дек. 2017 г., 08:07
Я полностью скопировал код. Пока я не могу понять свою ошибку.
 Cole Xia - MSFT05 дек. 2017 г., 08:26
извините, моя ошибка, я изменил код в методеSegControl_ValueChanged , пожалуйста, проверь это ..

Ваш ответ на вопрос