【发布时间】:2026-01-05 21:25:01
【问题描述】:
我有一个Canvas,其 XAML 定义如下:
<Canvas Height="201" VerticalAlignment="Top"
Name="myCanvas"
KeyDown="KeyEvent" >
<local:MyGlyphsElement x:Name="mge" />
<Line Name="myLine" Stroke="Blue" StrokeThickness="2"></Line>
</Canvas>
在MyGlyphsElement 控件的代码隐藏文件中,如何访问myLine 和myCanvas? (MyGlyphsElement 派生自 FrameworkElement。)
我的目的是能够在运行时将控件添加到myCanvas 子级以及操纵myLine 属性,例如笔划宽度等。
编辑:
public partial class MyGlyphsElement: FrameworkElement
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext); // Good practice.
...
Canvas cp = (Canvas)this.Parent;
// Now what? How do I access myLine?
【问题讨论】:
-
请参阅My Example,了解如何使用适当的 WPF 技术(例如 XAML、DataBinding、ItemsControls 和 DataTemplates,而不是过程代码)来执行此操作。
-
HighCore 是对的,但除此之外,FrameworkElement 有一个
Parent属性,您可以将其转换为 Canvas。画布反过来(与任何其他面板一样)具有Children属性。 -
@Clemens:当我使用父属性时,我收到“枚举错误/集合已更改”异常。
-
您或许应该将相关代码添加到您的问题中。否则很难知道发生了什么。
-
@HighCore:你以前帮助过我,我已经剖析和研究了你的许多解决方案,你是我的知识来源。但有时 MVVM 模式过于矫枉过正,人们只是想要一个快速的解决方案。