样式化和格式化ComboBox选定项以匹配ItemTemplate

时间:2016-04-01 18:12:14

标签: wpf combobox string-formatting

我已将ComboBox绑定到DateTime值列表,以选择事件的开始时间。我使用ItemTemplate指定列表中DateTime的格式。我还希望用户能够在列表中手动指定的开始时间,例如8:27 AM9:30 PM

布线不是问题;相反,我希望向用户显示与列表相同的格式DateTime

<ComboBox x:Name="StartTimeButton"
          ItemsSource="{Binding DataContext.StartTimes, 
                                RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
          SelectedItem="{Binding DefaultStartTime}"
          IsEditable="True">
   <ComboBox.ItemTemplate>
      <DataTemplate>
         <Label>
            <TextBlock Text="{Binding StringFormat='{}{0:hh:mm tt}'}" />
         </Label>
      </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>

这导致:

Editable Text Area is not formatted the same as the dropdown area.

我无法确定如何格式化TextBlock使用的顶部ComboBox(启用编辑时)以匹配下拉区域的格式。

1 个答案:

答案 0 :(得分:0)

让你半途而废的超速牌(你可以放弃ellipse_one = [Ellipse(xy= (0,0), width=a_ellipse_one, height=b_ellipse_one, angle = rotation_ellipse_one) plt.gca().add_patch(ellipse_one) ax.add_patch(ellipse_one) plt.axis('scaled') plt.show() ):

DataTemplate

问题是,<ComboBox ItemsSource="{Binding Times}" IsEditable="True" ItemStringFormat="hh:mm tt" TextSearch.TextPath="Hour"/> 没有以该格式输出时间的属性。就个人而言,我会编写一个包含内部DateTime的包装器和一个有助于格式化字符串并从中解析的属性。

似乎没有从输入文本创建新项目的标准方法,因此如果输入的值不在列表中,您可能需要手动解析DateTime