|
|
1
6
当您的列表框失去焦点时,它会因为您的触发器而将所选项目设置为null。您可以使用一些代码来选择焦点,这些代码在您失去焦点时不会取消选择。 XAML编号:
代码隐藏:
|
|
2
5
“当我添加此触发器时,当焦点在子文本框上时,项目被选中,但第一个行为消失。现在,当我在列表框外单击时,该项被取消选中。“ 事实上,我不认为它已经失去了原来的行为。我怀疑发生的事情是你直接从其他地方点击文本框,所以底层的ListBoxItem实际上从未被选中。但是,如果是这样的话,您会看到选择在您想离开时仍然保留。 你可以通过直接点击ListBoxItem来测试它(旁注:你应该给它一个背景,即使只是“透明”的,这样它就可以接收鼠标点击,如果它是空的,它就不会),或者仅仅点击“Shift Tab”来设置焦点,从文本框返回。 但是,这并不能解决您的问题,即TextBox获得焦点,但不让底层ListBoxItem知道它。 您可以使用两种方法来实现这一点:事件触发器或附加的行为。
以下是附带的行为。注意:如果您想实现这个功能,您还需要处理multi-select。还要注意的是,虽然我将行为附加到ListBoxItem,但在内部我强制转换为UIElement。这样,您也可以在ComboBoxItem、TreeViewItem等中使用它。基本上,任何ContainerItem都可以在基于选择器的控件中使用。
当然,这假设您已经导入了一个名为“behaviors”的XML名称空间,该名称空间指向包含类的名称空间。您可以将类本身放入一个共享的“Helper”库中,我们就是这么做的。这样,无论我们在哪里需要它,它都是XAML中设置的一个简单属性,行为会处理其他所有事情。 |
|
|
3
4
在本例中,我所做的是在用作数据模板的所有控件上设置样式,以发送
|