【问题标题】:Modifying already added child elements修改已添加的子元素
【发布时间】:2015-01-27 08:46:39
【问题描述】:

如何编辑/修改已添加的子元素?

我有一个 grid 添加了子元素 border 设置为特定颜色。如何在不添加新子元素的情况下更改现有的border 颜色?

因为我需要动态创建这些元素,所以我使用了代码而不是 xaml。
我定义了我的网格并为其添加了一个边框,如下所示:

    Dim NewNodeGrid As New Grid
    Dim Bcgkgr As New SolidColorBrush
    Dim MyBorder As New Border

    Bcgkgr.Color = Color.FromArgb(255, 85, 57, 33)

    MyBorder.BorderBrush = Brushes.Black
    MyBorder.BorderThickness = New Thickness(5, 5, 5, 5)
    MyBorder.Background = Bcgkgr
    MyBorder.CornerRadius = New CornerRadius(15)
    MyBorder.Name = "Border"

    NewNodeGrid.Children.Add(MyBorder)

那么在这完成之后,是否可以访问这个子元素MyBorder并改变它的属性比如BorderBrush

我尝试过类似:NewNodeGrid.Children.Item(0).BorderBrush = Brushes.Blue,但这不起作用。

编辑:

上面的代码会运行多次,从而创建NewNodegrid 的多个实例。我需要能够更改任何给定的单个/多个实例的边框,而不是一次全部更改。

编辑2:

一个例子来说明我想要实现的目标:

我想在运行时创建多个对象(已定义对象的新实例)。之后,我想更改任何这些对象的某些属性。

它看起来像这样:

通过使用上面的代码(类似版本),我创建了两个带边框的对象。之后,当我单击该对象时,我想更改一个对象的边框颜色。

【问题讨论】:

  • 您是否尝试从代码中设置 MyBorder.BorderBrush ?
  • 是的,这适用于一个元素,但我需要能够为 NewNodeGrid 的多个/不同实例设置不同的画笔
  • 您可以简单地将子元素转换为 Border 类型(前提是它们实际上是 Borders)。如果必须将多个 Borders 的 BorderBrush 设置为相同的颜色,可能更容易将单个 SolidColorBrush 分配给所有 Borders,然后只需更改此 SolidColorBrush 的 Color 属性。
  • 我不认为这对我有用。上面的代码将运行多次,从而创建NewNodegrid 的多个实例。我需要能够更改任何给定的单个/多个实例的边框,而不是一次全部更改。抱歉含糊不清。编辑了帖子。

标签: wpf vb.net border parent-child children


【解决方案1】:

仅仅因为您没有使用 XAML,not 就意味着您不能使用数据绑定。您可能需要参考 MSDN 上的 How to: Create a Binding in Code 页面以获得更多帮助,但简而言之,您可以像此示例一样以编程方式设置 binding(取自链接页面):

MyData myDataObject = new MyData(DateTime.Now);      
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
myText.SetBinding(TextBlock.TextProperty, myBinding);

使用数据绑定设置,您需要做的就是更改数据绑定属性值以更新 UI 中的值...继续此示例:

myDataObject.MyDataProperty = "Some new value";

【讨论】:

  • 不确定如何为多个实例对象实现此功能。我是否应该为所述对象创建一个公共属性并尝试将其绑定到某个内部控制 (BorderBrush)?
  • 你说的多实例对象是什么意思?
  • 我需要能够在运行时创建多个对象(已定义对象的新实例)。在那之后,我需要能够更改任何这些对象的某些属性。例如:i.imgur.com/j4I71sP.png 通过使用上面的代码(类似版本),我创建了两个带边框的对象。之后,当我单击该对象时,我想更改一个对象的边框颜色。
  • 对原始帖子添加了进一步的编辑以说明我想要实现的目标。
  • 听起来你需要定义一个DataTemplate。请参阅 MSDN 上的 Data Templating Overview 页面以获取更多帮助。
【解决方案2】:

经过无休止的反复试验和不断的搜索,我找到了适合我的解决方案。

要通过鼠标单击更改任何添加的Grid 元素的边框颜色,mouse_down 事件如下所示:

Dim ExistingBorder = CType(sender, Grid).Children.OfType(Of Border)().FirstOrDefault()
ExistingBorder.BorderBrush = Brushes.Red

从这篇文章中得到这个想法:how to get the children of an element WPF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2021-09-09
    • 1970-01-01
    • 2019-12-29
    • 2012-06-14
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多