'OnMoseDown'메서드를 재정의 한 사용자 지정 Canvas 클래스가 이미 있습니다. 하지만 이제는 'Children.Add'메서드를 재정의하려고합니다. 하지만 해결책을 찾지 못했습니다.WPF에서 Canvas 클래스의 Children.Add 메서드를 재정의하는 방법
아이가 캔버스에 추가되면 Child.ActualWidth를 가져 오려고합니다.
감사합니다.
'OnMoseDown'메서드를 재정의 한 사용자 지정 Canvas 클래스가 이미 있습니다. 하지만 이제는 'Children.Add'메서드를 재정의하려고합니다. 하지만 해결책을 찾지 못했습니다.WPF에서 Canvas 클래스의 Children.Add 메서드를 재정의하는 방법
아이가 캔버스에 추가되면 Child.ActualWidth를 가져 오려고합니다.
감사합니다.
방금 나 자신이 내 대답을 찾았습니다. 희망이 사람을 도울 수 있습니다 언젠가.
그냥 내 사용자 정의 클래스public void Add(UserControl element)
{
bool alreadyExist = false;
element.Uid = element.Name;
foreach (UIElement child in this.Children)
{
if (child.Uid == element.Uid)
{
alreadyExist = true;
this.BringToFront(child);
}
}
if (!alreadyExist)
{
this.Children.Add(element);
this.UpdateLayout();
double top = (this.ActualHeight - element.ActualHeight)/2;
double left = (this.ActualWidth - element.ActualWidth)/2;
Canvas.SetLeft(element, left);
Canvas.SetTop(element, top);
}
}
제대로 작동하지 않을 수 있습니다. ActualWidth
이 설정되기 전에 레이아웃 단계에서 해당 속성이 설정되므로 하위 항목이 추가됩니다.
여기에 귀하의 목표에 따라, 대신 MeasureOverride
및 ArrangeOverride
을 무시하는 것이 좋습니다, 대신 서브 클래 싱 Canvas
의 making a custom layout panel.
에 추가 방법을 추가하지만, 당신이 당신의 자신의 패널 클래스를 만드는 경우가 크기 –
@KishoreJangid을 받아 들일 내가 링크 된 문서로,이 방법에 추가 된 아이를 얻는 방법 보여 주었다, 당신은 당신의'InternalChildren'을 언제든지 얻을 수 있습니다 ... http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.internalchildren.aspx –
어떻게 추가할까요? 내 이전 드래그 캔버스 –