首页 > 解决方案 > 组合框作为控件模板传递,然后作为弹出窗口传递

问题描述

我有一个组合框“recent_users”作为控件模板,然后作为弹出窗口。如何将弹出窗口的选定值传递给下面的方法?(弹出点击)

recent_users.SelectedItem.ToString() 始终返回 null。

    private void usernameEnter_PreviewMouseUp(object sender, MouseButtonEventArgs e)
    {
        Trace.WriteLine("testing dropdown");
        ControlTemplate ct = recent_users.Template;
        Popup popup1 = ct.FindName("PART_Popup", recent_users) as Popup;

        if (popup1 != null)
        {
            popup1.Placement = PlacementMode.Top;
        }
        
        recent_users.IsDropDownOpen = true;
        popup1.PreviewMouseUp += new MouseButtonEventHandler((s,e) => popupClick(s,e,recent_users.SelectedItem.ToString()));
    }

    private void popupClick(object sender, MouseButtonEventArgs e, String recent)
    {
        usernameEnter.Text = recent;
        Trace.WriteLine("appending norms");
    }
}

}

标签: c#wpf

解决方案


不是因为用户没有在 ComboBox 中做出任何选择吗?我稍微重写了代码

private void usernameEnter_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
    ControlTemplate ct = recent_users.Template;
    Popup popup1 = ct.FindName("PART_Popup", recent_users) as Popup;

    if (popup1 != null)
    {
        popup1.Placement = PlacementMode.Top;
    }

    recent_users.IsDropDownOpen = true;

    // if none selected, set first as selected
    if (recent_users.SelectedIndex < 0 && recent_users.HasItems)
    {
        recent_users.SelectedIndex = 0;
    }
    var selectedItem = recent_users.SelectedItem as ComboBoxItem;
    var selectedUser = selectedItem.Content.ToString();

    popup1.PreviewMouseUp += new MouseButtonEventHandler((s, e) => popupClick(s, e, selectedUser));
}

但我想知道为 PreviewMouseUp 事件(在最后一行)添加一个处理程序是您真正想要的。我会在最近的用户的 SelectionChanged 中获取选定的用户。


推荐阅读