|
マウス使用時には発生せず、タッチ時には発生することから、ライブラリレベルの不具合かも?と考えました。
また、この問題が発生する時、PreviewMouseUpイベントは発生せずに、PreviewStylusUpイベントだけが発生することを確認しました。
このため、対処療法的ですが、下記の方法で解決としました。
コンボボックス内のDataTemplateに定義したLabelのPreviewStylusUpイベントを補足して、
内部的にコンボボックスのアイテムを選択します。
---
private void Label_PreviewStylusUp(object sender, StylusEventArgs e)
{
// コンボボックス内のDataTemplateに定義したLabelのPreviewStylusUpイベントを補足する。
// 内部的にコンボボックスを選択する。
SelectComboBoxLabel(combo, (DependencyObject)e.OriginalSource);
}
private static void SelectComboBoxLabel(ComboBox combo, DependencyObject dep)
{
while ((dep != null) && !(dep is Label))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null) return;
if (dep is Label)
{
Label lbl = dep as Label;
lbl.Focus();
combo.SelectedItem = lbl.DataContext;
}
// 開いたコンボボックスを閉じる。
CloseComboBox(combo);
}
private static void CloseComboBox(ComboBox combo)
{
if (combo.IsDropDownOpen)
{
combo.IsDropDownOpen = false;
var binding = combo.GetBindingExpression(ComboBox.SelectedItemProperty);
if (binding != null)
{
binding.UpdateSource();
binding.UpdateTarget();
}
}
}
|