C# 如何正确格式化DatePicker样式模板

C# 如何正确格式化DatePicker样式模板,c#,visual-studio,xaml,datepicker,uwp,C#,Visual Studio,Xaml,Datepicker,Uwp,我需要格式化一个UWP日期选择器。我想得到的是一个普通的日期选择器,它适合于网格 下面是我如何将DatePicker嵌入GridColumn的: <Grid Grid.Row="1" Grid.Column="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Gri

我需要格式化一个UWP日期选择器。我想得到的是一个普通的日期选择器,它适合于网格

下面是我如何将DatePicker嵌入GridColumn的:

<Grid Grid.Row="1" Grid.Column="1">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <DatePicker Grid.Column="0"
                HorizontalAlignment="Left"
                MonthFormat="{}{month.abbreviated(3)}" 
                Date="{Binding AppointmentStartDateProxy, Mode=TwoWay}" 
                DateChanged="DatePicker_DateChanged" 
                Style="{StaticResource DatePickerStyle1}"> 
        <DatePicker.IsEnabled>
            <Binding Path="Closed" Converter="{StaticResource negationConverter}"/>
        </DatePicker.IsEnabled>
    </DatePicker>
</Grid>

以下是样式模板的“关键”更改:

<Style x:Key="DatePickerStyle1" TargetType="DatePicker">
    <.../>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DatePicker">
                <StackPanel x:Name="LayoutRoot" Margin="{TemplateBinding Padding}" HorizontalAlignment="Stretch" >
                    <ContentPresenter x:Name="HeaderContentPresenter"
                                      x:DeferLoadStrategy="Lazy"
                                      Visibility="Collapsed"
                                      Content="{TemplateBinding Header}"
                                      ContentTemplate="{TemplateBinding HeaderTemplate}"
                                      Margin="0,0,0,8"
                                      Foreground="{ThemeResource SystemControlForegroundBaseHighBrush}"
                                      AutomationProperties.AccessibilityView="Raw" />
                    <Button x:Name="FlyoutButton"
                            HorizontalAlignment="Left"
                            Style="{StaticResource DatePickerFlyoutButtonStyle}"
                            Foreground="{TemplateBinding Foreground}"
                            Background="{TemplateBinding Background}"
                            IsEnabled="{TemplateBinding IsEnabled}"
                            HorizontalContentAlignment="Stretch" />

设置Style.Setter.Value.ControlTemplate.StackPanel.Button.HorizontalAlignment=“Left”时 my DatePicker未填充其父控件:

设置Style.Setter.Value.ControlTemplate.StackPanel.Button.HorizontalAlignment=“Strech”时,我的日期选择器与其父控件重叠:

当我将StyleTemplates LayoutRoot从StackPanel更改为Grid时,此行为也保持不变

在我的理解中,RootLayout控件应该从包含日期选择器的网格继承其大小,按钮应该从RootLayout获取其大小,从而适合我的GridColumn

编辑:

当仅将日期选择器水平对齐方式更改为Strech(以及在样式取消的情况下)时,它将与父网格重叠到远处:

实际上,您不需要更改样式或
按钮的对齐方式。您只需在两个控件中将
水平对齐
设置为
拉伸
。请注意,它的默认值是
Left

<Grid x:Name="LayoutRoot">
    <Grid Width="800">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <DatePicker Grid.Column="0" MonthFormat="{}{month.abbreviated(3)}" HorizontalAlignment="Stretch" />
        <TimePicker Grid.Column="1" HorizontalAlignment="Stretch" />
    </Grid>
</Grid>

嗨,贾斯汀,看到我的编辑上面,它没有工作的预期。
<DatePicker Grid.Column="0" MonthFormat="{}{month.abbreviated(3)}" HorizontalAlignment="Stretch" MinWidth="80" />
<TimePicker Grid.Column="1" HorizontalAlignment="Stretch" MinWidth="80" />