зеркало из https://github.com/DeGsoft/maui-linux.git
429 строки
13 KiB
C#
429 строки
13 KiB
C#
using System;
|
|
using System.Linq;
|
|
|
|
namespace Xamarin.Forms.Controls
|
|
{
|
|
|
|
public class FlowDirectionGalleryLandingPage : ContentPage
|
|
{
|
|
FlowDirection DeviceDirection => Device.FlowDirection;
|
|
|
|
public FlowDirectionGalleryLandingPage()
|
|
{
|
|
|
|
var np = new Button { Text = "Try NavigationPage", Command = new Command(() => { PushNavigationPage(DeviceDirection); }) };
|
|
var mdp = new Button { Text = "Try MasterDetailPage", Command = new Command(() => { PushMasterDetailPage(DeviceDirection); }) };
|
|
var crp = new Button { Text = "Try CarouselPage", Command = new Command(() => { PushCarouselPage(DeviceDirection); }) };
|
|
var tp = new Button { Text = "Try TabbedPage", Command = new Command(() => { PushTabbedPage(DeviceDirection); }) };
|
|
var cp = new Button { Text = "Try ContentPage", Command = new Command(() => { PushContentPage(DeviceDirection); }) };
|
|
|
|
Content = new StackLayout
|
|
{
|
|
Children = {
|
|
new Label { Text = "Click a button below to swap the MainPage of the app." },
|
|
np,
|
|
mdp,
|
|
crp,
|
|
tp,
|
|
cp
|
|
}
|
|
};
|
|
}
|
|
|
|
public static void PushNavigationPage(FlowDirection direction)
|
|
{
|
|
((App)Application.Current).SetMainPage(new FlowDirectionGalleryNP(direction));
|
|
}
|
|
|
|
public static void PushMasterDetailPage(FlowDirection direction)
|
|
{
|
|
((App)Application.Current).SetMainPage(new FlowDirectionGalleryMDP(direction));
|
|
}
|
|
|
|
public static void PushCarouselPage(FlowDirection direction)
|
|
{
|
|
((App)Application.Current).SetMainPage(new FlowDirectionGalleryCarP(direction));
|
|
}
|
|
|
|
public static void PushTabbedPage(FlowDirection direction)
|
|
{
|
|
((App)Application.Current).SetMainPage(new FlowDirectionGalleryTP(direction));
|
|
}
|
|
|
|
public static void PushContentPage(FlowDirection direction)
|
|
{
|
|
((App)Application.Current).SetMainPage(new FlowDirectionGalleryCP(direction)
|
|
{
|
|
FlowDirection = direction
|
|
});
|
|
}
|
|
}
|
|
|
|
public class FlowDirectionGalleryNP : NavigationPage
|
|
{
|
|
public FlowDirectionGalleryNP(FlowDirection direction)
|
|
{
|
|
FlowDirection = direction;
|
|
Navigation.PushAsync(new FlowDirectionGalleryCP(direction));
|
|
Navigation.PushAsync(new FlowDirectionGalleryCP(direction));
|
|
}
|
|
}
|
|
|
|
public class FlowDirectionGalleryMDP : MasterDetailPage
|
|
{
|
|
public FlowDirectionGalleryMDP(FlowDirection direction)
|
|
{
|
|
FlowDirection = direction;
|
|
Master = new FlowDirectionGalleryCP(direction) { Title = "Master", BackgroundColor = Color.Red };
|
|
Detail = new FlowDirectionGalleryCP(direction) { Title = "Detail" };
|
|
IsPresented = true;
|
|
}
|
|
}
|
|
|
|
public class FlowDirectionGalleryCarP : CarouselPage
|
|
{
|
|
public FlowDirectionGalleryCarP(FlowDirection direction)
|
|
{
|
|
FlowDirection = direction;
|
|
Children.Add(new FlowDirectionGalleryCP(direction) { Title = "1" });
|
|
Children.Add(new FlowDirectionGalleryCP(direction) { Title = "2" });
|
|
Children.Add(new FlowDirectionGalleryCP(direction) { Title = "3" });
|
|
}
|
|
}
|
|
|
|
public class FlowDirectionGalleryTP : TabbedPage
|
|
{
|
|
public FlowDirectionGalleryTP(FlowDirection direction)
|
|
{
|
|
FlowDirection = direction;
|
|
Children.Add(new FlowDirectionGalleryCP(direction) { Title = "1", BackgroundColor = Color.Red });
|
|
Children.Add(new FlowDirectionGalleryCP(direction) { Title = "2", BackgroundColor = Color.Orange });
|
|
Children.Add(new FlowDirectionGalleryCP(direction) { Title = "3", BackgroundColor = Color.Yellow });
|
|
}
|
|
}
|
|
|
|
public class FlowDirectionGalleryCP : ContentPage
|
|
{
|
|
FlowDirection DeviceDirection => Device.FlowDirection;
|
|
|
|
Page ParentPage => (Parent as Page) ?? this;
|
|
|
|
public FlowDirectionGalleryCP(FlowDirection direction)
|
|
{
|
|
var item = new ToolbarItem
|
|
{
|
|
Icon = "coffee.png",
|
|
Text = "Item 1",
|
|
};
|
|
|
|
var item2 = new ToolbarItem
|
|
{
|
|
Icon = "bank.png",
|
|
Text = "Item 2",
|
|
};
|
|
|
|
ToolbarItems.Add(item);
|
|
ToolbarItems.Add(item2);
|
|
|
|
Title = "Flow Direction Gallery";
|
|
NavigationPage.SetHasBackButton(this, true);
|
|
NavigationPage.SetBackButtonTitle(this, "Back");
|
|
SetContent(direction);
|
|
}
|
|
|
|
void SetContent(FlowDirection direction)
|
|
{
|
|
var hOptions = LayoutOptions.Start;
|
|
|
|
var imageCell = new DataTemplate(typeof(ImageCell));
|
|
imageCell.SetBinding(ImageCell.ImageSourceProperty, ".");
|
|
imageCell.SetBinding(ImageCell.TextProperty, ".");
|
|
|
|
var textCell = new DataTemplate(typeof(TextCell));
|
|
textCell.SetBinding(TextCell.DetailProperty, ".");
|
|
|
|
var entryCell = new DataTemplate(typeof(EntryCell));
|
|
entryCell.SetBinding(EntryCell.TextProperty, ".");
|
|
|
|
var switchCell = new DataTemplate(typeof(SwitchCell));
|
|
switchCell.SetBinding(SwitchCell.OnProperty, ".");
|
|
switchCell.SetValue(SwitchCell.TextProperty, "Switch Cell!");
|
|
|
|
var vc = new ViewCell
|
|
{
|
|
View = new StackLayout
|
|
{
|
|
Children = { new Label { HorizontalOptions = hOptions, Text = "View Cell! I have context actions." } }
|
|
}
|
|
};
|
|
|
|
var a1 = new MenuItem { Text = "First" };
|
|
vc.ContextActions.Add(a1);
|
|
var a2 = new MenuItem { Text = "Second" };
|
|
vc.ContextActions.Add(a2);
|
|
|
|
var viewCell = new DataTemplate(() => vc);
|
|
|
|
var relayout = new Switch
|
|
{
|
|
IsToggled = true,
|
|
HorizontalOptions = LayoutOptions.End,
|
|
VerticalOptions = LayoutOptions.Center
|
|
};
|
|
|
|
var flipButton = new Button
|
|
{
|
|
Text = direction == FlowDirection.RightToLeft ? "Switch to Left To Right" : "Switch to Right To Left",
|
|
HorizontalOptions = LayoutOptions.StartAndExpand,
|
|
VerticalOptions = LayoutOptions.Center
|
|
};
|
|
|
|
flipButton.Clicked += (s, e) =>
|
|
{
|
|
FlowDirection newDirection;
|
|
if (direction == FlowDirection.LeftToRight || direction == FlowDirection.MatchParent)
|
|
newDirection = FlowDirection.RightToLeft;
|
|
else
|
|
newDirection = FlowDirection.LeftToRight;
|
|
|
|
if (relayout.IsToggled)
|
|
{
|
|
ParentPage.FlowDirection = newDirection;
|
|
|
|
direction = newDirection;
|
|
|
|
flipButton.Text = direction == FlowDirection.RightToLeft ? "Switch to Left To Right" : "Switch to Right To Left";
|
|
|
|
return;
|
|
}
|
|
|
|
if (ParentPage == this)
|
|
{
|
|
FlowDirectionGalleryLandingPage.PushContentPage(newDirection);
|
|
return;
|
|
}
|
|
string parentType = ParentPage.GetType().ToString();
|
|
switch (parentType)
|
|
{
|
|
case "Xamarin.Forms.Controls.FlowDirectionGalleryMDP":
|
|
FlowDirectionGalleryLandingPage.PushMasterDetailPage(newDirection);
|
|
break;
|
|
case "Xamarin.Forms.Controls.FlowDirectionGalleryCarP":
|
|
FlowDirectionGalleryLandingPage.PushCarouselPage(newDirection);
|
|
break;
|
|
case "Xamarin.Forms.Controls.FlowDirectionGalleryNP":
|
|
FlowDirectionGalleryLandingPage.PushNavigationPage(newDirection);
|
|
break;
|
|
case "Xamarin.Forms.Controls.FlowDirectionGalleryTP":
|
|
FlowDirectionGalleryLandingPage.PushTabbedPage(newDirection);
|
|
break;
|
|
}
|
|
};
|
|
|
|
var horStack = new StackLayout
|
|
{
|
|
Orientation = StackOrientation.Horizontal,
|
|
Children = { flipButton, new Label { Text = "Relayout", HorizontalOptions = LayoutOptions.End, VerticalOptions = LayoutOptions.Center }, relayout }
|
|
};
|
|
|
|
var grid = new Grid
|
|
{
|
|
ColumnDefinitions = {
|
|
new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) },
|
|
new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) },
|
|
},
|
|
RowDefinitions = {
|
|
new RowDefinition { Height = new GridLength(100, GridUnitType.Absolute) },
|
|
new RowDefinition { Height = new GridLength(100, GridUnitType.Absolute) },
|
|
new RowDefinition { Height = new GridLength(100, GridUnitType.Absolute) },
|
|
new RowDefinition { Height = new GridLength(100, GridUnitType.Absolute) },
|
|
new RowDefinition { Height = new GridLength(100, GridUnitType.Absolute) },
|
|
new RowDefinition { Height = new GridLength(100, GridUnitType.Absolute) },
|
|
new RowDefinition { Height = new GridLength(100, GridUnitType.Absolute) },
|
|
}
|
|
};
|
|
|
|
int col = 0;
|
|
int row = 0;
|
|
|
|
var ai = AddView<ActivityIndicator>(grid, ref col, ref row);
|
|
ai.IsRunning = true;
|
|
|
|
var box = AddView<BoxView>(grid, ref col, ref row);
|
|
box.WidthRequest = box.HeightRequest = 20;
|
|
box.BackgroundColor = Color.Purple;
|
|
|
|
var btn = AddView<Button>(grid, ref col, ref row);
|
|
btn.Text = "Some text";
|
|
|
|
var date = AddView<DatePicker>(grid, ref col, ref row, 2);
|
|
|
|
var edit = AddView<Editor>(grid, ref col, ref row);
|
|
edit.WidthRequest = 100;
|
|
edit.HeightRequest = 100;
|
|
edit.Text = "Some longer text for wrapping";
|
|
|
|
var entry = AddView<Entry>(grid, ref col, ref row);
|
|
entry.WidthRequest = 100;
|
|
entry.Text = "Some text";
|
|
|
|
var image = AddView<Image>(grid, ref col, ref row);
|
|
image.Source = "oasis.jpg";
|
|
|
|
var lbl1 = AddView<Label>(grid, ref col, ref row);
|
|
lbl1.WidthRequest = 100;
|
|
lbl1.HorizontalTextAlignment = TextAlignment.Start;
|
|
lbl1.Text = "Start text";
|
|
|
|
var lblLong = AddView<Label>(grid, ref col, ref row);
|
|
lblLong.WidthRequest = 100;
|
|
lblLong.HorizontalTextAlignment = TextAlignment.Start;
|
|
lblLong.Text = "Start text that should wrap and wrap and wrap";
|
|
|
|
var lbl2 = AddView<Label>(grid, ref col, ref row);
|
|
lbl2.WidthRequest = 100;
|
|
lbl2.HorizontalTextAlignment = TextAlignment.End;
|
|
lbl2.Text = "End text";
|
|
|
|
var lbl3 = AddView<Label>(grid, ref col, ref row);
|
|
lbl3.WidthRequest = 100;
|
|
lbl3.HorizontalTextAlignment = TextAlignment.Center;
|
|
lbl3.Text = "Center text";
|
|
|
|
//var ogv = AddView<OpenGLView>(grid, ref col, ref row, hOptions, vOptions, margin);
|
|
|
|
var pkr = AddView<Picker>(grid, ref col, ref row);
|
|
pkr.ItemsSource = Enumerable.Range(0, 10).ToList();
|
|
|
|
var sld = AddView<Slider>(grid, ref col, ref row);
|
|
sld.WidthRequest = 100;
|
|
sld.Maximum = 10;
|
|
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
|
|
{
|
|
sld.Value += 1;
|
|
if (sld.Value == 10d)
|
|
sld.Value = 0;
|
|
return true;
|
|
});
|
|
|
|
var stp = AddView<Stepper>(grid, ref col, ref row);
|
|
|
|
var swt = AddView<Switch>(grid, ref col, ref row);
|
|
|
|
var time = AddView<TimePicker>(grid, ref col, ref row, 2);
|
|
|
|
var prog = AddView<ProgressBar>(grid, ref col, ref row, 2);
|
|
prog.WidthRequest = 200;
|
|
prog.BackgroundColor = Color.DarkGray;
|
|
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
|
|
{
|
|
prog.Progress += .1;
|
|
if (prog.Progress == 1d)
|
|
prog.Progress = 0;
|
|
return true;
|
|
});
|
|
|
|
var srch = AddView<SearchBar>(grid, ref col, ref row, 2);
|
|
srch.WidthRequest = 200;
|
|
srch.Text = "Some text";
|
|
|
|
TableView tbl = new TableView
|
|
{
|
|
Intent = TableIntent.Menu,
|
|
Root = new TableRoot
|
|
{
|
|
new TableSection("TableView")
|
|
{
|
|
new TextCell
|
|
{
|
|
Text = "A",
|
|
},
|
|
|
|
new TextCell
|
|
{
|
|
Text = "B",
|
|
},
|
|
|
|
new TextCell
|
|
{
|
|
Text = "C",
|
|
},
|
|
|
|
new TextCell
|
|
{
|
|
Text = "D",
|
|
},
|
|
}
|
|
}
|
|
};
|
|
|
|
var stack = new StackLayout
|
|
{
|
|
Children = { new Button { Text = "Go back to Gallery home", Command = new Command(()=> { ((App)Application.Current).SetMainPage(((App)Application.Current).CreateDefaultMainPage()); }) },
|
|
new Label { Text = $"Device Direction: {DeviceDirection}" },
|
|
horStack,
|
|
grid,
|
|
new Label { Text = "TableView", FontSize = 10, TextColor = Color.DarkGray },
|
|
tbl,
|
|
new Label { Text = "ListView w/ TextCell", FontSize = 10, TextColor = Color.DarkGray },
|
|
new ListView { HorizontalOptions = hOptions, ItemsSource = Enumerable.Range(0, 3).Select(c => "Text Cell!"), ItemTemplate = textCell },
|
|
new Label { Text = "ListView w/ SwitchCell", FontSize = 10, TextColor = Color.DarkGray },
|
|
new ListView { HorizontalOptions = hOptions, ItemsSource = Enumerable.Range(0, 3).Select(c => true), ItemTemplate = switchCell },
|
|
new Label { Text = "ListView w/ EntryCell", FontSize = 10, TextColor = Color.DarkGray },
|
|
new ListView { HorizontalOptions = hOptions, ItemsSource = Enumerable.Range(0, 3).Select(c => "Entry Cell!"), ItemTemplate = entryCell },
|
|
new Label { Text = "ListView w/ ImageCell", FontSize = 10, TextColor = Color.DarkGray },
|
|
new ListView { HorizontalOptions = hOptions, ItemsSource = Enumerable.Range(0, 3).Select(c => "coffee.png"), ItemTemplate = imageCell },
|
|
new Label { Text = "ListView w/ ViewCell", FontSize = 10, TextColor = Color.DarkGray },
|
|
new ListView { HorizontalOptions = hOptions, ItemsSource = Enumerable.Range(0, 3), ItemTemplate = viewCell },
|
|
},
|
|
|
|
HorizontalOptions = hOptions
|
|
};
|
|
|
|
Content = new ScrollView
|
|
{
|
|
Content = stack
|
|
};
|
|
}
|
|
|
|
T AddView<T>(Grid grid, ref int col, ref int row, int colSpan = 1) where T : View
|
|
{
|
|
var hOptions = LayoutOptions.Start;
|
|
var vOptions = LayoutOptions.End;
|
|
var margin = new Thickness(0, 10);
|
|
var bgColor = Color.LightGray;
|
|
|
|
T view = (T)Activator.CreateInstance(typeof(T));
|
|
|
|
view.VerticalOptions = vOptions;
|
|
view.HorizontalOptions = hOptions;
|
|
view.Margin = margin;
|
|
view.BackgroundColor = bgColor;
|
|
|
|
var label = new Label { Text = $"({col},{row}) {typeof(T).ToString()}", FontSize = 10, TextColor = Color.DarkGray };
|
|
|
|
if (colSpan > 1 && col > 0)
|
|
NextCell(ref col, ref row, colSpan);
|
|
|
|
grid.Children.Add(label, col, col + colSpan, row, row + 1);
|
|
grid.Children.Add(view, col, col + colSpan, row, row + 1);
|
|
|
|
NextCell(ref col, ref row, colSpan);
|
|
|
|
return (T)view;
|
|
}
|
|
|
|
void NextCell(ref int col, ref int row, int colspan)
|
|
{
|
|
if (col == 0 && colspan == 1)
|
|
{
|
|
col = 1;
|
|
}
|
|
else
|
|
{
|
|
col = 0;
|
|
row++;
|
|
}
|
|
}
|
|
}
|
|
} |