在触摸屏上使用时,WPF组合框不是很好。用户必须点击组合框,并在一定的区域等释放,在一定的时间框架内。基本上是鼠标向下,然后鼠标向上。如果用户轻击(或与点击相同)缓慢,则没有选择ComboBoxItem。
为了改进这一点,我喜欢改变ComboBox项目,使它对MouseDown事件作出反应,这将使在触摸屏上使用手指时选择组合框项更加自然。
我的想法是创建一个继承自ComboBoxItem的CustomComboBoxItem。
public class CustomComboBoxItem : ComboBoxItem
{
protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e)
{
IsSelected = true;
OnSelected(e);
}
}
但是必须让这个工作。继续:
消息=类型为'CustomComboBoxItem'的样式不能应用于类型为'ComboBoxItem'。
有什么办法吗?
我认为没有必要使用CustomComboBoxItem. 你所要做的就是调用touch
事件,并在它触摸一个项目时锁定它,这样无论你在屏幕上走到哪里,该项目都被选中并在你第一次触摸它时解锁。
touchdevice
mousedevice.capture
bool IsTouch = false;
private void ComboBoxItem_PreviewTouchDown(object sender, TouchEventArgs e)
{
ComboBoxItem comboBoxItem = (ComboBoxItem)sender;
e.TouchDevice.Capture(comboBoxItem);
IsTouch = true;
}
private void ComboBoxItem_PreviewTouchUp(object sender, TouchEventArgs e)
{
ComboBoxItem comboBoxItem = (ComboBoxItem)sender;
comboBoxItem.ReleaseTouchCapture(e.TouchDevice);
IsTouch = false;
}
private void ComboBoxItem_TouchMove(object sender, TouchEventArgs e)
{
if(IsTouch)
{
//do work.............................
}
}