Xamarin表单:日期选择器在更改时不调整全宽

时间:2018-11-29 10:17:06

标签: xamarin.forms

我在Xamarin表单页面中添加了一个日期选择器。我面临的问题是,如果我选择的日期的文本长度大于以前选择的日期,那么在初始页面加载时,日期选择器在屏幕上占据的大小不会随着更改日期而改变大小。

例如,如果我最初选择的日期为2018年5月21日,并且如果我将日期更改为2018年11月21日,那么由于文本长度增加了,因此全文不会显示在屏幕上。 / p>

请让我知道如何解决此问题。

XAML:

<StackLayout Style="{StaticResource layoutListItem}">
                            <Label Style="{StaticResource labelStandard}" Text="From" HorizontalOptions="Start" />
                            <DatePicker Date="{Binding FromDateFilter}" TextColor="#777777" VerticalOptions="CenterAndExpand" 
                                        HorizontalOptions="EndAndExpand" MaximumDate="{Binding ToDateFilter}">
                                <DatePicker.Format>dd-MMMM-yyyy</DatePicker.Format>
                                <DatePicker.Effects>
                                    <effects:EntryNoBorderEffect />
                                </DatePicker.Effects>
                            </DatePicker>
                        </StackLayout>

初始负载:(日期范围->从:2017年5月29日开始)

enter image description here

更改时:(日期范围->从:2017年11月29日开始)

enter image description here

3 个答案:

答案 0 :(得分:2)

对于那些即使在版本 Xamarin.Forms 5.0.0.2012 上仍在等待修复的人,这里有一个解决方法:

每当日期改变时延长 Xamarin.Forms.DatePicker 并调用 InvalidateMeasure

public class FixedDatePicker : DatePicker
{
    public FixedDatePicker()
    {
        DateSelected += FixedDatePicker_DateSelected;
    }

    private void FixedDatePicker_DateSelected(object sender, DateChangedEventArgs e)
    {
        InvalidateMeasure();
    }
}

在 XAML 中使用此扩展类而不是默认类。

我希望 Xamarin 团队尽快修复此错误。

答案 1 :(得分:0)

问题不在于日期选择器,而在于您选择的方法:

由于您使用StackLayout并将日期选择器的HorizontalOptions设置为EndAndExpand,因此导致日期选择器没有空间放置剩余日期

我建议您做的是用EndAndExpand代替End或用StackLayout代替Grid,这将使控制100倍更容易< / p>

答案 2 :(得分:0)

   <StackLayout 
      Orientation="Horizontal" 
      HorizontalOptions="FillAndExpand"
      VerticalOptions="FillAndExpand"> 
      put your DatePicker inside this.                       
   </StackLayout>

并将WidthRequest传递给DatePicker,否则将使用网格代替StackLayout