xamarin.forms滚动视图键盘出现,按钮也滚动

时间:2015-01-16 18:09:55

标签: c# xamarin.forms

嗨,我有一个奇怪的问题。

我使用xamarin.forms为数据输入目的定义了一些标签和文本框。 我把它们包装成滚动视图,这样当键盘出现时,它们应该滚动。

工作正常。具有焦点的控件滚动到顶部,键盘在获得焦点时出现。但我的表格底部也有几个按钮。现在,问题是,每当键盘出现时,我的底部按钮也会滚动。这看起来很奇怪。按钮用于提交或取消,它应该保持在底部。

以下是我的代码:

var firstNameLabel = new Label { HorizontalOptions = LayoutOptions.Fill };              
firstNameLabel.Text = "First Name";

            var firstName = new Entry() { HorizontalOptions = LayoutOptions.FillAndExpand };
            firstName.SetBinding (Entry.TextProperty,MyViewModel.FirstNamePropertyName);

            var lastNameLabel = new Label { HorizontalOptions = LayoutOptions.Fill};
            lastNameLabel.Text = "Last Name";
            var lastName = new Entry() { HorizontalOptions = LayoutOptions.FillAndExpand };
            lastName.SetBinding (Entry.TextProperty, MyViewModel.LastNamePropertyName);
---- other fields

Button btnSubmit  = new Button
            {
                HorizontalOptions = LayoutOptions.Fill,
                BackgroundColor = Color.FromHex("#22498a"),
                TextColor = Color.White,
                Text = "Submit"
            };

var cancelButton = new Button { Text = Cancel", BackgroundColor = Color.FromHex("0d9c00"), TextColor = Color.White };
            contactUsButton.Clicked +=  (object sender, EventArgs e) =>
            {
                // cancel operation
            };

var cotrolStakeLayout = new StackLayout () {
                Padding = new Thickness(Device.OnPlatform(5, 5, 5),0 , Device.OnPlatform(5, 5, 5), 0), //new Thickness(5,0,5,0),
                VerticalOptions = LayoutOptions.FillAndExpand, 
                HorizontalOptions = LayoutOptions.Fill,
                Orientation = StackOrientation.Vertical,
                Children = { firstNameLabel, firstName, lastNameLabel, lastName, -- and other fields}
            };

var scrollableContentLayout = new ScrollView (){ 
                Content = cotrolStakeLayout,
                 Orientation = ScrollOrientation.Vertical,
                 HorizontalOptions = LayoutOptions.Fill,
                 VerticalOptions = LayoutOptions.Fill
            };


var buttonLayout = new StackLayout (){ 
                Padding = new Thickness(Device.OnPlatform(5, 5, 5),0 , Device.OnPlatform(5, 5, 5), 0), //new Thickness(5,0,5,0),
                HorizontalOptions = LayoutOptions.Fill,
                VerticalOptions = LayoutOptions.Fill, 
                Orientation = StackOrientation.Vertical,
                Children= { btnSubmit , cancelButton }
            };


var nameLayout = new StackLayout()
            {
                HorizontalOptions = LayoutOptions.Fill,
                VerticalOptions = LayoutOptions.Fill, 
                Orientation = StackOrientation.Vertical,
                Children = {scrollableContentLayout,buttonLayout}
            };

return nameLayout;

任何想法都有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您必须更改布局才能达到目标:
- 定义" Main-StackLayout"
- 创建一个" Button-StackLayout"为你的按钮(应保持在顶部)
- 将按钮添加到"按钮 - StackLayout"
- 将"按钮-StackLayout添加到" Main-StackLayout"
- 将ScrollView添加到" Main-StackLayout"
- 将页面内容设置为" Main-StackLayout"
这应该工作:按钮保持在顶部,(仅)可以滚动ScrollView。