我正在开发一个WPF项目,我有一个月的组合框应该包含从1月到12月的几个月。我设法通过以下片段来完成;
var americanCulture = new CultureInfo("en-US");
ddlMonth.Items.AddRange(americanCulture.DateTimeFormat.MonthNames);
并将列表作为;
January
February
March
....
但我希望他们填充为;
01 - January
02 - February
03 - March
.....
任何想法如何继续循环?我是C#的新手。感谢
答案 0 :(得分:6)
野应。你为什么要在后端做这件事。利用wpf并使用xaml。
让我试着解释一下如何做到这一点。
首先为Months创建一个依赖项属性。如果您还没有使用依赖项属性。你现在应该研究它们http://wpftutorial.net/DependencyProperties.html。在下面的代码中,我通过新的PropertyMetadata(new CultureInfo(“en-US”)将Date属性的默认值设置为月份列表.DateTimeFormat.MonthNames.Take(12).ToList()))。所以现在我们可以从xaml获取这个属性。
public partial class MainWindow : Window
{
public static readonly DependencyProperty MonthsProperty = DependencyProperty.Register(
"Months",
typeof(List<string>),
typeof(MainWindow),
new PropertyMetadata(new CultureInfo("en-US").DateTimeFormat.MonthNames.Take(12).ToList()));
public List<string> Months
{
get
{
return (List<string>)this.GetValue(MonthsProperty);
}
set
{
this.SetValue(MonthsProperty, value);
}
}
public MainWindow()
{
InitializeComponent();
}
}
您需要一个转换器。 http://wpftutorial.net/ValueConverters.html如果不熟悉它们。转换器将要做的是列表中的每个值,我们将修改字符串以获得所需的结果。因此,为值转换器创建一个新类。
[ValueConversion(typeof(List<string>), typeof(List<string>))]
public class MonthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//get the list of months from the object sent in
List<string> months = (List<string>)value;
//manipulate the data index starts at 0 so add 1 and set to 2 decimal places
if (months != null && months.Count > 0)
{
for (int x = 0; x < months.Count; x++)
{
months[x] = (x + 1).ToString("D2") + " - " + months[x];
}
}
return months;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
在xaml中设置它。为您的窗口创建一个名称,即x:Name =“testWindow”,这样可以在绑定时更好地访问它。设置命名空间,以便获得转换器。 的xmlns:主要= “CLR的命名空间:WpfApplication4”。将转换器添加到资源中。在组合框中,将itemssource绑定到您的依赖项属性Months并通过转换器发送它。
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="testwindow"
xmlns:Main="clr-namespace:WpfApplication4"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Main:MonthConverter x:Key="MonthConverter"/>
</Window.Resources>
<Grid>
<ComboBox ItemsSource="{Binding ElementName=testwindow,Path=Months, Converter={StaticResource MonthConverter}}" HorizontalAlignment="Left" Margin="197,107,0,0" VerticalAlignment="Top" Width="120"/>
</Grid>
</Window>
答案 1 :(得分:4)
var americanCulture = new CultureInfo("en-US");
var count = 1;
//.Take(12) in the foreach below because apparantly MonthNames returns 13
//elements of which the last one is empty
foreach (var month in americanCulture.DateTimeFormat.MonthNames.Take(12))
{
DropDownList1.Items.Add(new ListItem{Text = count.ToString("00") + "-" + month});
count++;
}
答案 2 :(得分:2)
试试这个:
List<string> names = new List<string>();
int num = 1;
foreach (var item in americanCulture.DateTimeFormat.MonthNames)
{
names.Add(string.Format("{0} - {1}", num++.ToString("D2"), item));
}
ddlMonth.Items.AddRange(names);
答案 3 :(得分:2)
最好的办法就是拥有当天的组合框和本月的组合框。
用途
for (int i = 1; i <= DateTime.DaysInMonth(year, month); i++) {
cmbDay.Items.Add(i.ToString());
}