#xaml #xamarin #xamarin.forms
#xaml #xamarin #xamarin.forms
Вопрос:
Я пытаюсь реализовать такой дизайн, как показано на рис. на моей странице, как я могу добиться этого в Xamarin.forms, в основном, в shared project. Поскольку я пытаюсь уменьшить сложность, выполняя в зависимости от платформы.
Я пытался использовать это даже https://github.com/XAM-Consulting/SlideOverKit . Но проблема в том, что я не могу скользить в меню, когда оно открыто (т. Е. После касания страницы я хочу, чтобы меню скрылось), но этого не происходит. Нам нужно вручную перетащить это, чтобы закрыть его.
Поэтому, пожалуйста, дайте мне знать, как этого добиться.
Спасибо
Ответ №1:
Основываясь на вашем описании, я изменил свой код, есть GIF
Когда вы нажимаете ImageButton
, вы должны вызвать этот метод this.HideMenu();
код QuickInnerMenuPage
public QuickInnerMenuPage()
{
Content = new StackLayout
{
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center,
Children = {
new Label(){Text="1222"}
}
};
this.SlideMenu = new QuickInnerMenuView(MenuOrientation.RightToLeft);
QuickInnerMenuView.ib.Clicked = (o, e) =>
{
this.HideMenu();
};
}
}
Существует код QuickInnerMenuView
public class QuickInnerMenuView : SlideMenuView
{
public static ImageButton ib;
public QuickInnerMenuView (MenuOrientation orientation)
{
ib = new ImageButton
{
Source = "Happy.png",
WidthRequest = 25,
HeightRequest = 25,
};
var mainLayout = new StackLayout {
Spacing = 15,
Children = {
ib,
new ImageButton {
Source = "Home.png",
WidthRequest = 25,
HeightRequest = 25,
},
new ImageButton {
Source = "MessageFilled.png",
WidthRequest = 25,
HeightRequest = 25,
},
new ImageButton {
Source = "Settings.png",
WidthRequest = 25,
HeightRequest = 25,
},
}
};
// In this case the IsFullScreen must set false
this.IsFullScreen = false;
this.BackgroundViewColor = Color.Transparent;
// You must set BackgroundColor,
// and you cannot put another layout with background color cover the whole View
// otherwise, it cannot be dragged on Android
this.BackgroundColor = Color.FromHex ("#C82630");
this.MenuOrientations = orientation;
if (orientation == MenuOrientation.BottomToTop) {
mainLayout.Orientation = StackOrientation.Vertical;
mainLayout.Children.Insert (0, new Image {
Source = "DoubleUp.png",
WidthRequest = 25,
HeightRequest = 25,
});
mainLayout.Padding = new Thickness (0, 5);
// In this case, you must set both WidthRequest and HeightRequest.
this.WidthRequest = 50;
this.HeightRequest = 200;
// A little bigger then DoubleUp.png image size, used for user drag it.
this.DraggerButtonHeight = 30;
// In this menu direction you must set LeftMargin.
this.LeftMargin = 100;
}
Комментарии:
1. Можете ли вы пометить это как ответ? Это поможет другим, у кого похожие проблемы
Ответ №2:
Вы добавляете, хотите ли вы достичь этого, как следующий GIF.
Если это так, то при использовании SlideMenu
вам следует создать новое представление, которое наследуется от MenuContainerPage
следующего кода.Примечание: MenuContainerPage
происходит от SlideOverKit
public class QuickInnerMenuPage: MenuContainerPage
{
public QuickInnerMenuPage()
{
Content = new StackLayout
{
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center,
Children = {
new Label(){Text="1222"}
}
};
this.SlideMenu = new QuickInnerMenuView(MenuOrientation.RightToLeft);
}
}
Вот моя демонстрация.вы могли бы сослаться на это.
https://github.com/851265601/SlideOverKitDemo
Комментарии:
1. Lu- MSFT спасибо за ваш ответ, но я использую тот же способ. Вместо того, чтобы отображать изображение в режиме просмотра слайдов, я использую imagebutton, и когда я нажимаю любую из кнопок, появляется всплывающее окно, и слайд-шоу должно быть скрыто.
2. Lu- MSFT Привет, у меня есть еще один вопрос к тебе по этому поводу. Если я хочу, чтобы это slidemenu было вертикальным, но с левой стороны. Возможно ли это, как для top to bottom, но я хочу, чтобы это было с левой стороны.