在 Xamarin.Forms 中显示日期选取器,单击“框架布局”



我正在使用Xamarin.Forms做一个应用程序。在那里,我需要在单击框架布局时显示日期选择器。为此,我这样做了。

XAML 部件

<Frame Margin="15,0,15,5" HasShadow="false" OutlineColor="{StaticResource TextColorBlue}" BackgroundColor="White" x:Name="selectDate" HorizontalOptions="FillAndExpand">
            <StackLayout Orientation="Vertical" HorizontalOptions="FillAndExpand">
                <DatePicker x:Name="datePicker" IsVisible="false" DateSelected="Handle_DateSelected" TextColor="Maroon" />
                <Label Text="Date" FontAttributes="Bold" FontSize="20" HorizontalOptions="Center" TextColor="{StaticResource TextColorBlue}" />
                <BoxView HorizontalOptions="FillAndExpand" BackgroundColor="Silver" HeightRequest="1" />
                <Grid RowSpacing="1" ColumnSpacing="1" HorizontalOptions="FillAndExpand">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" />
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Label Text="Saturday" FontAttributes="Bold" FontSize="25" Grid.Row="0" Grid.Column="0" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{StaticResource TextColorBlue}" />
                    <Label Text="May" FontAttributes="Bold" FontSize="25" Grid.Row="0" Grid.Column="1" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{StaticResource TextColorBlue}" />
                    <Label Text="20" FontAttributes="Bold" FontSize="25" Grid.Row="1" Grid.Column="0" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{StaticResource TextColorBlue}" />
                    <Label Text="2017" FontAttributes="Bold" FontSize="25" Grid.Row="1" Grid.Column="1" HorizontalOptions="Center" VerticalOptions="Center" TextColor="{StaticResource TextColorBlue}" />
                </Grid>
            </StackLayout>
            <Frame.GestureRecognizers>
                <TapGestureRecognizer NumberOfTapsRequired="1" Tapped="Handle_Tapped_DatePicker" />
            </Frame.GestureRecognizers>
        </Frame>

CS 部分

void Handle_Tapped_DatePicker(object sender, System.EventArgs e)
    {
        Debug.WriteLine("Handle_Tapped_DatePicker");
        if (datePicker.IsFocused)
        {
            Debug.WriteLine("Yes, datePicker is focused");
            datePicker.Unfocus();
        }
        datePicker.Focus();
    }
    void Handle_DateSelected(object sender, Xamarin.Forms.DateChangedEventArgs e)
    {
        Debug.WriteLine("e.NewDate: " + e.NewDate.ToString());
    }

但这里什么也没发生。日期选取器未显示。我正在 iOS 模拟器上进行测试。请帮我解决这个问题。

谢天谢地,经过一些搜索,我得到了答案。问题是,您需要通过device main UI thread将日期选择器的焦点带到 .我已经像这样更改了我的代码。

Device.BeginInvokeOnMainThread(() =>
        {
            if (datePicker.IsFocused)
                datePicker.Unfocus();
            datePicker.Focus();
        });

最新更新