- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这很奇怪。下面代码的要点是支持一个 attachedProperty,如果它的任何子元素获得焦点,它会通知容器。
即我有一个 Grid,它的 Content 中某处有一个文本框,如果其中一个控件获得焦点,我想将 Grid 变成蓝色。
我有一个带有 ItemsTemplate 的 ListView。 ItemsTemplate 是一个包含一些东西的 DataTemplate...但其中之一是 ContentControl。
例子:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Border>
<ContentControl Content="{Binding Something}"/>
</Border>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
ContentControl 上的 Binding 应该显示某种类型的 UserControl。创建后...工作正常。如果我从 Grid 元素开始递归迭代 listViewItem 的模板...它也会遍历 ContentControl 的“Content”。
但是...一旦我在 ListView ItemsSource 绑定(bind)到的 ObservableCollection 上执行 .Move(),根据 LogicalTreeHelper,ContentControl.Content 为空。
什么给了?
如果我检查 ContentControl,它会向我显示内容...但是 LogicalTreeHelper.GetChildren 返回并清空 Enumerator。
我很困惑......
谁能解释一下为什么会这样?
LogicalTreeHelper 迭代器方法
public static void applyFocusNotificationToChildren(DependencyObject parent)
{
var children = LogicalTreeHelper.GetChildren(parent);
foreach (var child in children)
{
var frameworkElement = child as FrameworkElement;
if (frameworkElement == null)
continue;
Type frameworkType = frameworkElement.GetType();
if (frameworkType == typeof(TextBox) || frameworkType == typeof(ListView) ||
frameworkType == typeof(ListBox) || frameworkType == typeof(ItemsControl) ||
frameworkType == typeof(ComboBox) || frameworkType == typeof(CheckBox))
{
frameworkElement.GotFocus -= frameworkElement_GotFocus;
frameworkElement.GotFocus += frameworkElement_GotFocus;
frameworkElement.LostFocus -= frameworkElement_LostFocus;
frameworkElement.LostFocus += frameworkElement_LostFocus;
// If the child's name is set for search
}
applyFocusNotificationToChildren(child as DependencyObject);
}
}
最佳答案
你好,
以下是解决问题的建议:
我不确定我是否正确拼写了 GotFocus 事件,但它是一个 RoutedEvent,您可以在可视化树中的任何位置使用它。
如果您的某个项目获得焦点,您的 ListView 将收到通知,并且在处理程序中您可以做任何您想做的事情。
这个怎么样:
<ListView GotFocus="OnGotFocus">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Border>
<ContentControl Content="{Binding Something}"/>
</Border>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这只是一些随机逻辑来演示您可以做什么。
public void OnGotFocus(object sender, RoutedEventArgs e)
{
TreeViewItem item = sender as TreeViewItem;
if(((MyViewModel)item.Content).SomeColor == "Blue")
{
Grid g = VisualTreeHelper.GetChild(item, 0) as Grid;
g.Background = Colors.Blue;
}
}
GotFocus 是一个 RoutedEvent,如果被触发,它将在可视化树中冒泡。所以在某处捕获事件并检查哪个是触发事件的原始源对象。或者检查触发事件的对象的 ViewModel 属性是什么。
关于c# - LogicalTreeHelper.GetChildren - ObservableCollection Move() 导致 DataTemplate 中的 ContentControl 丢失其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15285041/
看下面的代码: public static void main(String[] args) { Group group1 = new Group(); Group g
我正在尝试制作一个创建棋盘的 javafx 程序。但是,当我尝试运行我的程序时,它会在这一行中抛出异常:optionsPane.getChildren().addAll(optionsPane, n_
例如,当我们向 Pane 添加新按钮时,我们需要编写以下代码: StackPane pane = new StackPane(); pane.getChildren().add(new Butto
我创建了一个单独的类来在 JavaFX 中设置网格。类如下: public class Grid { GridPane gp = new GridPane(); //sets grid (10
看下面的代码: public static void main(String[] args) { Group group1 = new Group(); Group g
我对 Java 比较陌生,尤其是 Javafx 和 GUI。我一直在研究这段代码,但我在理解最后一行正在做什么时遇到了一些困难。我知道倒数第二行是将所有组件添加到容器“p”中,但是当您在前面没有容器的
XML: .... PD1 PD2 PD3 ..
我想获取一个元素的所有子元素,包括文本节点。我如何在 MooTools 中执行此操作? mootools.net 上的文档明确指出 getChildren() 不包括文本节点。 最佳答案 您可以使用标
这是我的 xml: 例子: 987 0 F0F8DJH348DJ 46446
好吧,我不确定我是否在正确的地方问这个问题,但我希望这里有人可以帮助我。所以,我是 Java 初学者,我正在尝试制作 JavaFX 应用程序,但我的布局 1“getChildren.addAll(la
当我尝试调用 getChildren() 时在 mediapipeline 上其中运行了我的自定义模块端点我收到此异常: org.kurento.client.internal.server.Prot
为什么有时我们使用 getChildren() add() 而其他时候我们直接使用 add() es: https://docs.oracle.com/javafx/2/get_started/for
此代码不允许在我的窗口中绘制线条...我在 fxml 文件中只有一个简单的 Pane ,其 fx:id 为 hi 用于测试。没有错误,该行根本没有出现。我也用盒子和圆圈试过这个。我真的需要帮助,这是一
我有一个小问题,当我想添加文本字段时,VBOX 的按钮和标签我有一个错误:ObservableList 中的 addAll() 不能应用于: 在这个地方:vBox.getChildren().addA
如果我在 XML 文件上运行以下 python(请参见 Q 底部): import xml.etree.ElementTree as ET tree = ET.parse('C:\\temp\\tes
我清除了所有子项的网格 Pane ,然后再次将子项添加到网格 Pane 中,但它说存在重复项。 public void render(){ boardPane.getChildren().cl
我试图读取我之前在Excel工作表中插入的图像及其位置与此代码,它在我的机器上工作正常,但是当我将代码迁移到另一台电脑时,我在工作表中遇到空指针异常。 getDrawingPatriarch.getC
上下文 我正在为一个小游戏创建一个 GUI。游戏有一个开始屏幕。当玩家点击开始时,舞台场景从菜单场景变为游戏场景。新的游戏场景以 Group 作为父级,并包含一些元素,例如玩家的得分和姓名,所有这些元
我有一个 Group 子类的实例,我正在向其中添加其他 Groups。其中一个组是一个组的子类,它有一个方法 getCollision() .在那种方法中,我正在运行 for each循环检查该组父级
本文整理了Java中com.yahoo.text.XML.getChildren()方法的一些代码示例,展示了XML.getChildren()的具体用法。这些代码示例主要来源于Github/Stac
我是一名优秀的程序员,十分优秀!