不能在定时器间隔中使用整数
本文关键字:整数 定时器 不能 | 更新日期: 2023-09-27 18:12:25
我使用WPF和定时器不允许使用int为间隔。相反,它要求TimeSpan
timer1.Interval = TimeSpan.FromMilliseconds(Convert.ToDouble(comboBox1.SelectedItem));
所以我改变了我的代码,但在运行时它给了我一个InvalidCastException,说对象不能从System.Windows.Controls.ComboboxItem转换为System.IConvertible。
我该如何解决这个问题?
你应该使用
Convert.ToDouble(comboBox1.SelectedText)
comboBox1.SelectedItem
对应于ComboBox控件的选定项,而不是它的文本,这是您想要的。
具体来说,是CombBox控件的SelectedText
属性
获取或设置在组合框的可编辑部分中选定的文本。
,如这里所述。
请用这个:
((ComboBoxItem)comboBox1.SelectedItem).Content.ToString();
或者分两步:
ComboBoxItem item = (ComboBoxItem)comboBox1.SelectedItem;
timer1.Interval = TimeSpan.FromMilliseconds(Convert.ToDouble(item.Content.ToString()));
有关ComboBoxItem
类的更多信息,请查看此处
看起来您正在直接将ComboBoxItems添加到您的ComboBox中。
比解析字符串更干净、更安全的方法是继续绑定到SelectedItem,但也将ItemsSource绑定到一个整数集合。
然后使用ComboBox的ItemTemplate属性来定义如何呈现整数,如果你不满意默认的ToString()呈现。
<ComboBox ItemsSource="{Binding Intervals}" SelectedItem="{SelectedInterval}">
<ComboBox.ItemTemplate>
<DataTemplate TargetType="{x:Type Int64}">
<TextBlock Text="{Binding}" Background="Red"/>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox>
属性看起来像这样:
public int SelectedInterval {get;set;}
public List<int> Intervals {
get {
var lst = new List<int>();
for(var i = 1000; i <= 10000; i += 500)
{
lst.Add(i);
}
return lst;
}
}
现在您有了可以在不解析的情况下操作的强类型属性