天道酬勤,学无止境

在组合框中,如何确定突出显示的项目(非选定项目)?(In a combobox, how do I determine the highlighted item (not selected item)?)

问题

首先,公平警告:我是 C# 和 WPF 的完全新手。

我有一个组合框(可编辑、可搜索),我希望能够拦截 Delete 键并从列表中删除当前突出显示的项目。 在输入电子邮件地址时,我正在寻找的行为类似于 MS Outlook 的行为。 当您输入几个字符时,会显示潜在匹配项的下拉列表。 如果您移动到其中之一(使用箭头键)并点击删除,则该条目将被永久删除。 我想通过组合框中的条目来做到这一点。

这是 XAML(简化版):


<ComboBox x:Name="Directory"
    KeyUp="Directory_KeyUp"
    IsTextSearchEnabled="True"
    IsEditable="True"
    Text="{Binding Path=CurrentDirectory, Mode=TwoWay}"
    ItemsSource="{Binding Source={x:Static self:Properties.Settings.Default}, 
        Path=DirectoryList, Mode=TwoWay}" />

处理程序是:


private void Directory_KeyUp(object sender, KeyEventArgs e)
{
    ComboBox box = sender as ComboBox;
    if (box.IsDropDownOpen &&  (e.Key == Key.Delete))
    {
        TrimCombobox("DirectoryList", box.HighlightedItem);  // won't compile!
    }
}

使用调试器时,我可以看到box.HighlightedItem具有我想要的值,但是当我尝试放入该代码时,它无法编译:

System.Windows.Controls.ComboBox' does not contain a definition for 'HighlightedItem'...

那么:我如何访问该值? 请记住,该项目尚未选定。 它只是在鼠标悬停在它上面时突出显示。

谢谢你的帮助。

这是显示调试器显示的屏幕截图。 我将鼠标悬停在“框”上,当显示一行摘要时,我将鼠标悬停在 + 字符上以展开到此图像:

替代文字 http://www.freeimagehosting.net/uploads/2cff35d340.gif

回答1

Highlighted Item 属性是一个 Non-Public 成员,所以你不能从另一个类调用它。

替代文字 http://www.freeimagehosting.net/uploads/1e4dc53cee.png

我相信您需要使用 Reflection 来吸引非公共成员。 这是关于该主题的 SO 帖子:访问非公共成员 - ReflectionAttribute

回答2

以下是最终代码,受 Jean Azzopardi 的回答启发。 在调试器中显示的HighlightedItem是一个非公共属性,我强制使用GetType().GetProperty().GetValue()序列访问

private void Directory_KeyUp(object sender, KeyEventArgs e)
{
    ComboBox box = sender as ComboBox;
    if (box.IsDropDownOpen && (e.Key == Key.Delete))
    {
        const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
        PropertyInfo hl = box.GetType().GetProperty("HighlightedItem", flags);
        if (hl != null)
        {
            String hlString = hl.GetValue(sender, null) as String;
            // TODO: remove from DirectoryList
        }
    }
}
回答3

您可以创建自己的 DrawItem 事件处理程序并保存正在绘制的项目的索引,并保留 DrawItemState.Selected(即突出显示的)一个。

void Main()
{
    Application.Run(new Form1());
}

public partial class Form1 : Form
{
    ComboBox ComboBox1;
    string[] ds = new string[]{"Foo", "Bar", "Baz"};

    public Form1 ()
    {
        InitializeComboBox();
    }

    private void InitializeComboBox()
    {
        ComboBox1 = new ComboBox();

        ComboBox1.DataSource = ds;
        Controls.Add(ComboBox1);

        ComboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
        ComboBox1.DrawItem += new DrawItemEventHandler(ComboBox1_DrawItem);
    }

    private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        e.DrawBackground();
        e.Graphics.DrawString(ds[e.Index],ComboBox1.Font,Brushes.Black,e.Bounds);

        if (e.State == DrawItemState.Selected)
        {
            //stores the "HighlightedIndex" in the control's tag field.  Change as you see fit.
            ComboBox1.Tag = e.Index; 
            //Console.WriteLine(e.Index);
        }
    }
}
回答4

System.Windows.Controls.ComboBox 的定义不包含属性HighlightedItem - 这就是您的代码无法编译的原因。

您是否使用从 System.Windows.Controls.ComboBox 派生的组合框? 然后只需将其转换为适当的类型。

稍后注意:如果您想捕获 ComboBox 的突出显示事件,请阅读此链接 - 它正好解决了这个问题。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 即使将焦点放在另一个控件上,如何更改listview所选行的背景色?(How to change listview selected row backcolor even when focus on another control?)
    问题 我有一个使用条形码扫描仪作为输入设备的程序,这意味着我需要将重点放在文本框上。 该程序具有一个listview控件,当扫描特定条形码时,我将以编程方式选择其中一项。 我通过以下方式设置行的背景色: listviewitem.BackColor = Color.LightSteelBlue; 我尝试过的事情: listview.HideSelection设置为false 设置颜色后调用listview.Focus() listviewitem.Focused设置为true 呼叫listview.Invalidate 呼叫listview.Update() 调用listview.Refresh() 上面的不同组合 我还在计时器中进行了上述组合,因此它们在不同的线程上被调用,但仍然没有成功。 有任何想法吗? 更多信息: 这里的关键是控制焦点。 选择其中一项时, listview控件没有焦点。 我通过执行以下操作选择一项: listView1.Items[index].Selected = true; 焦点始终在文本框中。 该计算机没有键盘或鼠标,只有条形码读取器。 我有以下代码可以将重点放在文本框上: private void txtBarcode_Leave(object sender, EventArgs e) { this.txtBarcode.Focus(); }
  • JComboBox 在多个表格单元格之间共享,自动选择当前选定的项目(JComboBox shared between multiple table cells automatically selecting currently selected item)
    问题 我使用下面的camickr提供的代码作为参考添加了一个组合框作为单元格编辑器: 如何向 JTable (Java) 中的列添加唯一的 JComboBoxes 除了我的情况,我只需要一个组合框供一列中的所有单元格使用。 我遇到的问题是组合框会自动选择最后一个选定的项目(或当前选定的项目,不确定),并且由于不同的行共享同一个组合框,如果您单击其中一个单元格,它会自动更改到最后选择的项目。 作为快速演示,我只是修改了上面的代码以显示问题。 我希望组合框自动选择列表中与所选单元格中设置的项目相同的项目(而不是选择一个单元格,然后让该单元格的内容自动更改) import java.awt.*; import java.awt.event.*; import java.util.List; import java.util.ArrayList; import javax.swing.*; import javax.swing.border.*; import javax.swing.table.*; public class Test extends JFrame { List<TableCellEditor> editors = new ArrayList<TableCellEditor>(3); public Test() { // Create the editors to be
  • 突出显示ListView选定的行(Highlight ListView selected row)
    问题 我有一张专辑清单(几百张)。 当我触摸选定的专辑时,我想为用户提供播放整个专辑或移动到其曲目ListView的选择。 没问题。 但是,在触摸albumListView中的空白之后,我希望该行保持突出显示,以便用户知道他们单击了哪个项目,然后可以移至“确定”或“播放”。 如何在ListView中突出显示一行? 回答1 引用自http://android-developers.blogspot.de/2008/12/touch-mode.html 想象一个简单的应用程序,例如ApiDemos,它显示了一个文本项列表。 用户可以使用轨迹球自由浏览列表,也可以使用触摸屏滚动和弹出列表。 这种情况下的问题是,当用户通过触摸屏操作列表时,如何正确处理选择。 在这种情况下,如果用户在列表顶部选择一个项目,然后将列表向底部倾斜,那么选择该怎么办? 它应该保留在项目上并滚动到屏幕之外吗? 如果用户随后决定使用轨迹球移动选择内容,应该怎么办? 或更糟糕的是,如果用户按下轨迹球以对当前选定的项目进行操作,该项目将不再显示在屏幕上,该怎么办? 经过仔细考虑,我们决定在用户​​通过触摸屏操纵UI时完全删除选择。 在触摸模式下,没有焦点,也没有选择。 用户进入触摸模式后,网格列表中的任何选定项目都会被取消选择。 同样,当用户进入触摸模式时,所有聚焦的窗口小部件都将变为非聚焦状态。
  • NSCollectionView中的选择突出显示(Selection Highlight in NSCollectionView)
    问题 我有一个工作正常的NSCollectionView ,但有一个较小但很关键的异常。 获取并突出显示集合中的选定项目。 在Snow Leopard之前,我已经完成了所有这些工作,但是似乎有些变化,我不能完全NSCollectionView ,所以我将NSCollectionView重新回到了基本测试中,并按照Apple的文档在此处创建了NSCollectionView。 : http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/CollectionViews/Introduction/Introduction.html 按照快速入门指南,收藏夹视图可以正常工作。 但是,本指南仅讨论了"There are such features as incorporating image views, setting objects as selectable or not selectable and changing colors if they are selected" 。 以这个为例,我进入了下一步,使用控制器键selectionIndexes将阵列控制器绑定到NSCollectionView
  • 如何使winforms中的Combobox只读(How to make Combobox in winforms readonly)
    问题 我不希望用户能够更改组合框中显示的值。 我一直在使用Enabled = false但它使文本变灰,所以它不是很可读。 我希望它表现得像一个带有ReadOnly = true的文本框,文本正常显示,但用户无法编辑它。 有没有办法做到这一点? 回答1 文章 ComboBox-with-read-only-behavior 提出了一个有趣的解决方案: 在同一位置创建只读文本框和组合框。 当你想要只读模式时,显示文本框,当你想要它可编辑时,显示组合框。 回答2 将DropDownStyle属性设置为DropDownList而不是DropDown然后处理TextChanged事件以防止用户更改文本。 回答3 不确定这是否是您要找的东西,但是... 设置 DropDownStyle = DropDownList 然后在 SelectedIndexChanged 事件上 if (ComboBox1.SelectedIndex != 0) { ComboBox1.SelectedIndex = 0; } 这个丑陋的部分是他们会“感觉”他们可以改变它。 他们可能会认为这是一个错误,除非您向他们发出警报,告诉他们为什么无法更改该值。 回答4 我能建议的最好的事情是用只读文本框(或者只是一个标签)替换组合框 - 这样用户仍然可以选择/复制值等。 当然
  • 将选定的文本块设为大写(Make selected block of text uppercase)
    问题 我可以在Visual Studio Code中对所有大写字母的文本进行多行选择吗? 在完整的Visual Studio中,请按CTRL + SHIFT + U来执行此操作。 我所看到的现有扩展仅适用于非多行块。 回答1 问题是有关如何在Visual Studio Code中使CTRL + SHIFT + U起作用。 这是怎么做的。 (版本1.8.1或更高版本)。 文件->首选项->键盘快捷方式。 将出现一个带有keybindings.json文件的编辑器。 将以下JSON放置在那里并保存。 [ { "key": "ctrl+shift+u", "command": "editor.action.transformToUppercase", "when": "editorTextFocus" }, { "key": "ctrl+shift+l", "command": "editor.action.transformToLowercase", "when": "editorTextFocus" } ] 现在, CTRL + SHIFT + U将大写选定的文本,即使多行也是如此。 同样, CTRL + SHIFT + L将使所选文本变为小写。 这些命令内置于VS Code中,不需要任何扩展即可使它们起作用。 回答2 突出显示要大写的文本。 然后按CTRL + SHIFT +
  • WinForm控件属性大全
    1、窗体1、常用属性(1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。(2) WindowState属性: 用来获取或设置窗体的窗口状态。 取值有三种: Normal (窗体正常显示)、 Minimized(窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示)。(3)StartPosition属性:用来获取或设置运行时窗体的起始位置。其取值及含义如表9-1 所示。默认的起始位置是WindowsDefaultLocation。 (4)Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。(5)Width属性:用来获取或设置窗体的宽度。(6)Height属性:用来获取或设置窗体的高度。(7)Left属性:用来获取或设置窗体的左边缘的x坐标(以像素为单位)。(8)Top属性:用来获取或设置窗体的上边缘的y坐标(以像素为单位)。(9)ControlBox属性:用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控制框。值为true时将显示控制框,值为false时不显示控制框。(10)MaximizeBox属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。值为 true时显示最大化按钮,值为false时不显示最大化按钮。(11)MinimizeBox 属性:用来获取或设置一个值
  • 如何仅在SQL Server Management Studio中运行光标所在的语句?(How can I run just the statement my cursor is on in SQL Server Management Studio?)
    问题 作为Oracle蟾蜍的老用户,我已经习惯于按Ctrl + Enter并只执行光标下的语句。 在SQL Server Management Studio中,按F5键将运行整个脚本。 要仅运行当前语句,我必须手动突出显示所需的语句,然后单击F5。 这真让我讨厌。 有人知道带有键盘快捷键的工具可以在SQL Server上仅运行当前语句吗? 我将仅针对这一功能更改工具。 注意:奇怪的是,甚至免费的Toad for SQL Server也不允许您仅在游标下运行该语句。 回答1 使用Ctrl + KU选择一行。 然后使用F5运行它。 尽管它仅适用于单行选择,但我仍然发现它非常有用。 希望能帮助到你!! 回答2 您可以检出此SSMS 2012加载项。将光标放在要执行的语句中,然后按CTRL + SHIFT + E SSMS执行器-https://github.com/devvcat/ssms-executor/releases 更新: 项目移至github,并重新编写了插件以支持SSMS 2014,SSMS2016。(以前,该项目位于SSMS Executor的Codeplex上-http://ssmsexecutor.codeplex.com/。) 回答3 好的,所以我从所有这些答案中得到的是“不,那是不可能的”。 编辑: 这是我能够执行此操作的方式: 1-下载SQL Developer
  • 如何取消选择/空白数据绑定的组合框? SelectedIndex = -1不起作用(How to deleselect / blank a databound ComboBox? SelectedIndex = -1 does not work)
    问题 我试图在Windows窗体应用程序中取消选择(空白显示)多个组合框。 在我的应用程序中,我有一个Reset方法,该方法将每个组合的SelectedIndex设置为-1。 我所有的组合框都是数据绑定的,即每个组合框都是使用数据源填充的。 我已经注意到,有时我的Reset方法起作用,即,它取消选择当前选中的项目并使组合变为空白。 但是,有时我会在我尝试将其设置为-1之后立即选择第一个项目(SelectedIndex = 0)。 从用户的角度来看,这似乎是一个错误,因为它并不总是“清除”表单。 根据MSDN: “要取消选择当前选定的项目,请将SelectedIndex设置为-1。如果该ComboBox项目是数据绑定项目,则不能将ComboBox项目的SelectedIndex设置为-1。” 有人知道解决方法吗? 非常感谢 回答1 结合使用void和property comboBox.ResetText(); //to reset selected value comboBox.SelectedIndex = -1; 回答2 不知道是否有人对此感兴趣,因为现在已经过去了5年,但是我发现了一个非常简单的解决方法。 完全不直观(我只是通过查看参考源代码发现它),但是实现起来很简单: ComboBox1.FormattingEnabled = True; 是的,仅此而已! 如果您感到好奇
  • 如何在不使用Visual Studio进行调试的情况下启动单个项目?(How to start a single project without debugging in Visual Studio?)
    问题 我的解决方案包含多个可以启动的项目。 有时我想在不使用解决方案启动项目设置的情况下启动单个项目。 右键单击项目时,可以导航到“调试”->“启动新实例”,这将使用调试器启动应用程序。 但是我想在没有调试器的情况下启动一个新实例。 这可能吗? 回答1 如果您对永久解决方案感兴趣,那么我已经为该任务编写了一个小宏。 它做以下事情: 获取当前选定的项目(如果您选择了多个项目,它将使用第一个选定的项目。) 保存当前的启动项目将当前选定的项目设置为“启动”项目,并以“无调试启动”模式运行当前选定的项目。 将初始启动项目还原为启动项目。 以下是我编写的宏以及执行该操作的过程。 如何编写宏:首先,您需要转到Visual Studio工具->宏->宏资源管理器。 右键单击MyMacros并创建一个新模块(我称其为CollapseAll)。 现在,编辑新模块(双击它),擦除其中的所有内容并将其粘贴到其中。 Sub RunSelectedWithoutDebug() Dim Projs As Array Dim Proj As Project Projs = DTE.ActiveSolutionProjects() If (Projs.Length > 0) Then Proj = Projs.GetValue(0) Dim Prop As EnvDTE.Property Prop = DTE
  • 在组合框中对齐文本(Align Text in Combobox)
    问题 我想在组合框中对齐我的文本,以便它显示在组合框的中心告诉我如何执行此操作,您还可以看到组合框周围有一个默认边框,当它处于焦点时我如何也可以删除该边框请解决我的两个问题 谢谢 回答1 ComboBox 不支持此功能。 确切的原因在时间的迷雾中迷失了,ComboBox 自 90 年代初就已经存在,但肯定与让文本框部分中的文本与下拉列表中的文本对齐的尴尬有关。 使用 DrawItem 自定义绘图也无法解决它,只会影响下拉项的外观。 作为一种可能的解决方法,您也许可以做一些奇怪的事情,例如用空格填充项目字符串,使它们看起来居中。 您将需要 TextRenderer.MeasureText() 来确定要为每个项目添加多少个空格。 您所说的“边框”不是边框,而是焦点矩形。 您也无法摆脱它,Windows 拒绝让您创建一个不会显示带有焦点的控件的 UI。 喜欢键盘而不是鼠标的用户关心这一点。 没有解决方法。 回答2 这篇文章将帮助你:http://blog.michaelgillson.org/2010/05/18/left-right-center-where-do-you-align/ 诀窍是将 ComboBox 的DrawMode -Property 设置为OwnerDrawFixed并订阅其事件DrawItem 。 您的事件应包含以下代码: // Allow Combo Box
  • 以字符串形式获取列表框中所选项目的值(Getting value of selected item in list box as string)
    问题 我正在尝试使用下面的代码获取列表框中所选项目的值,但它始终返回空字符串。 DataSet ds = searchforPrice(Convert.ToString(listBox1.SelectedItem)); 在这里,我试图将所选项目的值作为字符串传递给方法searchforPrice,以从数据库中检索数据集。 如何将所选项目的值检索为字符串? 我正在从组合框向列表框添加项目,而组合框又从数据库加载了项目。 listBox1.Items.Add(comboBox2.Text); 任何人对此都有答案。 回答1 如果要检索项目的显示文本,请使用GetItemText方法: string text = listBox1.GetItemText(listBox1.SelectedItem); 回答2 如果您在应用程序中使用ListBox,并且想要返回ListBox的选定值并将其显示在Label或其他任何东西中,然后使用此代码,它将对您有帮助 private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { label1.Text = listBox1.SelectedItem.ToString(); } 回答3 要获取à列表框中所有选定项的值,可以在DataRowView中转换选定项
  • 除非您先更改选择,否则 ComboBox 不会更新其显示列表(ComboBox will not update its display list unless you change selections first)
    问题 更新:我在完全测试之前检查了答案仍然不起作用。 我更新了下面的代码,所以你应该能够粘贴到一个空的 WinForms 项目中,它应该可以编译。 更新:我发现如果我将 ComboBox 上的选定项目更改为任何其他项目,它现在会按预期运行(在下面的代码中,我将从 test1 切换到 test2)。 由于我还没有收到任何答案,我把问题改成这个。 为什么我必须在组合框中更改为不同的项目,然后才能显示我对基础数据源所做的更改? 这是正在发生的事情的快速测试用例。 将test1asdf中的test1更改为test1asdf文本单击关闭以提交更改组合框中的文本不会更新。 将组合框更改为 test2 将test2asdf中的test2更改为test2asdf文本单击关闭以提交更改组合框中的文本立即显示“test2asdf”仍显示下拉列表中第一项的test1 更改为test1 组合框显示test1文本框显示test1asdf 将文本框更新为test1asd 组合框立即显示test1asd 除了在幕后更改加载时选定的项目并将其改回(这似乎是一个黑客)之外,我该如何解决这个问题? 我有一个组合框数据绑定到绑定到List<Holder>的BindingSource ,它具有Holder.Name作为其显示值。 我还有一个绑定到Holder.Name的文本框,但如果我更改文本框中的文本
  • WP8高亮显示SelectedItem LongListSelector(WP8 Highlight SelectedItem LongListSelector)
    问题 我关心的是在用户点击我的LongListSelector时突出显示一个选定的项目。 我尝试了以下解决方案:http://code.msdn.microsoft.com/windowsapps/Highlight-a-selected-item-30ced444#content 但是我仍然有一个问题。 在我的项目中,LongListSelector充满了90〜100个项目,如果我点击第x个元素,则是第(x + 20)个,第(x + 40)个,第(x + 60)个,( x + 80) th ...也会突出显示。 那怎么可能? 是什么原因造成的? 我尝试调试,我注意到的是“ userControlList”(通过上面的链接查看MyLongListSelector1_SelectionChanged事件处理程序)在执行“ GetItemsRecursive”后具有20个元素,至少不像我预期的那样有90〜100个元素。 如果您不能解决此问题,那么有人知道如何在LongListSelector中突出显示所选项目吗? (而不是使用列表框) 回答1 我们如何为您写一个更好的,更容易理解的书呢? 另外,您可以组合使用突出显示的颜色吗? 我将其用于一些我的应用程序。 它所做的就是将背景色也绑定到该类。 如果选择它,则返回类的突出显示颜色;否则,返回非突出显示颜色。 示例数据点-如您所见
  • tkinter listbox get(ACTIVE)方法(tkinter listbox get(ACTIVE) method)
    问题 我试图将当前选择的Listbox项目打印出来。 例如,当我选择项目“一个”时,它应该打印出“一个”,而当我选择项目“两个”时,它应该打印出“两个”,等等。 from Tkinter import* root=Tk() sizex = 600 sizey = 400 posx = 40 posy = 20 root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy)) itemsforlistbox=['one','two','three','four','five','six','seven'] def CurSelet(evt): value=str((mylistbox.get(ACTIVE))) print value mylistbox=Listbox(root,width=60,height=10,font=('times',13)) mylistbox.bind('<<ListboxSelect>>',CurSelet) mylistbox.place(x=32,y=90) for items in itemsforlistbox: mylistbox.insert(END,items) root.mainloop() 我的问题是,每当我在列表框中选择一个项目时,它实际上就会打印出先前选择的项目。例如
  • 突出显示菜单抽屉/滑动菜单中的选定项目(Highlighting Selected item in menu-drawer/sliding menu)
    问题 使用的库: https://github.com/SimonVT/android-menudrawer https://github.com/JakeWharton/ActionBarSherlock https://github.com/JakeWharton/Android-ViewPagerIndicator 问题: 我一直在尝试在类似于 YouTube/Beautiful Widget 应用程序的 menudrawer 上实现突出显示,但我不知道应该如何解决这个问题。 下面我给我的 aprproche 一个样本,我不确定它是否是实现这样的事情的正确方法: 这是我创建的菜单抽屉 Adaptervew.click lisner: private AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mPreviousView=mActiveView; mActiveView=view; mActivePosition = position; //
  • 如何更新由另一个组合框触发的组合框中的值?(How to update the values in a combobox triggered by another combobox?)
    问题 我在一个表单中有 2 个组合框。 我希望在组合框 2 中的列表更新时更改组合框 1 中的选定值。 例如:ComboBox1 包含移动公司的名称,ComboBox2 包含该公司所有移动电话的列表。 回答1 假设您有一个将手机型号与其制造商相关联的字典: Dictionary<string, string[]> brandsAndModels = new Dictionary<string, string[]>(); public void Form_Load(object sender, EventArgs e) { brandsAndModels["Samsung"] = new string[] { "Galaxy S", "Galaxy SII", "Galaxy SIII" }; brandsAndModels["HTC"] = new string[] { "Hero", "Desire HD" }; } 您可以将要显示在左侧组合框中的项目显示为: foreach (string brand in brandsAndModels.Keys) comboBox1.Items.Add(brand); 您只需执行一次此操作,例如在表单的Load事件中。 注意: brandsAndModels字典必须是一个实例变量,而不是局部变量,因为我们稍后需要访问它。 然后
  • 使用MVVM重置组合框中的所选项目(Reset combobox selected item on set using MVVM)
    问题 我在WPF应用程序和以下MVVM中使用了ComboBox。 我想在ComboBox中显示一个字符串列表。 XAML: <ComboBox ItemsSource="{Binding ItemsCollection}" SelectedItem="{Binding SelectedItem}" /> 查看模型: public Collection<string> ItemsCollection; // Suppose this has 10 values. private string _selectedItem; public string SelectedItem { get { return _selectedItem; } set { _selectedItem = value; Trigger Notify of property changed. } } 现在这段代码可以正常工作了。 我可以从视图中进行选择,并且可以在ViewModel中进行更改,如果从ViewModel中更改SelectedItem,则可以在视图中看到它。 现在,这就是我想要实现的目标。 当我从视图中更改所选项目时,我需要检查该值是好是坏(或其他任何值),请设置所选项目,否则不要进行设置。 所以我的视图模型就这样改变。 public string SelectedItem { get {
  • Visual Studio 2010-推荐的扩展[关闭](Visual Studio 2010 - recommended extensions [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 这个问题的答案是社区的努力。 编辑现有答案以改善此职位。 它目前不接受新的答案或互动。 您推荐的Visual Studio 2010扩展是什么? (请指出其是否免费,以及其目的/功能) 回答1 自由: VsCommandBudy-在真正需要它们的地方使用外部命令扩展VS(免费) PowerCommands-Visual Studio 2010的有用扩展,为IDE的各个区域添加了附加功能。 DevExpress CodeRush Xpress-编码辅助,Intellisense导航等 AnkhSVN-对Visual Studio的Subversion支持。 Ghost Doc-简化您的XML注释。 Visual Studio颜色主题编辑器-使您的VS2010看起来更漂亮。 VsVim-Visual Studio的VIM仿真层。 DPack-Microsoft Visual Studio工具的免费集合。 VSFileNav-具有通配符+驼峰式案例搜索的快速搜索器。 音速文件查找器-快速便捷的搜索。 全部保证金
  • 如何更改列表框中单词的颜色(How do I change the color of a word inside a listbox)
    问题 我制作了一个带有文本框的表单,它接受一个单词并搜索一堆句子以查看其中是否包含该单词。之后我必须出现这些句子并突出显示该单词。我的计划是制作一个列表框并添加里面的句子。 我的问题是如何突出显示这个词(通过改变我想的颜色)以便区分。 有没有更好的方法? 我选择了 ListBox,这样我就可以选择我要查找的句子。 编辑 根据@Thorsten Dittmar 的指示,创建一个所有者绘制的列表框。 public partial class Form1 : Form { private List<string> _items; public Form1() { InitializeComponent(); _items = new List<string>(); _items.Add("One"); _items.Add("Two"); _items.Add("Three"); listBox1.DataSource = _items; } private void listBox1_DrawItem(object sender, DrawItemEventArgs e) { e.DrawBackground(); e.DrawFocusRectangle(); e.Graphics.DrawString(_items[e.Index], new Font(FontFamily