如何正确格式化DatePicker StyleTemplate

时间:2016-02-01 17:17:49

标签: c# visual-studio xaml datepicker uwp

我需要格式化UWP-DatePicker。我想要获得的是一个常见的DatePicker,它适合在网格中。

以下是我在GridColumn中嵌入DatePicker的方法:

[OperationContract]
[WebInvoke(Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Bare,
    UriTemplate = "getEvtTypesCnt")]
Dictionary<string,EvtTypes> GetEvtTypesCnt();

public Dictionary<string,EvtTypes> GetEvtTypesCnt()
{
    var data = new StHomeDBDataContext();
    var list = new List<EvtTypes>();
    foreach (var r in data.GetAllEvtTypesCnt_ToList())
    {
        list.Add(new EvtTypes
        {
            EvtType = r.evtType,
            EvtCnt = Convert.ToInt32(r.evtCnt)
        });

    }

    Dictionary<string,List<EvtType>> map =
       new Dictionary<string,List<EvtType>>();
    map.Add("evtType", list);

    return map;
}

这是&#34;关键&#34;对StyleTemplate的更改:

<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.Setter.Value.ControlTemplate.StackPanel.Button.Horizo​​ntalAlignment =&#34; Left&#34; 我的DatePicker没有填充其父控件: Button to Small

设置Style.Setter.Value.ControlTemplate.StackPanel.Button.Horizo​​ntalAlignment =&#34; Strech&#34;我的DatePicker与其父控件重叠: Button overlapping

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

根据我的理解,RootLayout-Control应该从包含DatePicker的Grid继承它的大小,而Button应该从RootLayout获取它的大小,结果是在我的GridColumn中拟合。

编辑:

当仅将DatePickers Horizo​​ntalAlignment更改为Strech(并且在样式的abscense中)时,它将父网格方式重叠为远: enter image description here

1 个答案:

答案 0 :(得分:5)

实际上,您无需更改样式或Button路线。您只需在两个控件中将HorizontalAlignment设置为Stretch即可。请注意,它的默认值为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的默认MinWidth 296TimePicker 242。因此,如果您可以将它们设置为较小的值,就像这样 -

<DatePicker Grid.Column="0" MonthFormat="{}{month.abbreviated(3)}" HorizontalAlignment="Stretch" MinWidth="80" />
<TimePicker Grid.Column="1" HorizontalAlignment="Stretch" MinWidth="80" />