我正在尝试实现一个 WPF 自定义控件,该控件FrameworkElement
在两个单独的面板中显示两个对象集合。该控件派生自ItemsControl
并具有一个Canvas
已IsItemsHost="True"
设置的控件。此外,我有一个Collection<FrameworkElement>
名字OtherItems
,我想在不同的Canvas
.
自定义控件定义了一个附加属性:myControl.Position
它确定项目在其画布中的 X 位置。该控件还定义了 aMinValue
和MaxValue
依赖属性。控件计算使用MinValue
,MaxValue
和control.Position
属性将UIElement
's 放置在适当的位置:
<----------0---------->
结果是:MinValue=10, MaxValue=110, myControl.Position=60
我可以处理myControl.Items
容器中项目的定位,但其中的项目myControl.OtherItems
具有空Parent
引用:
public static readonly DependencyProperty PositionProperty =
DependencyProperty.RegisterAttached("Position", typeof (double), typeof (myControl),
new FrameworkPropertyMetadata(0.0, OnPositionChanged));
public static void OnPositionChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
var element = sender as FrameworkElement;
if (element != null)
{
var container = element.Parent as myControl;
if (container != null)
{
container.PositionElement(element);
}
}
}
<!--Within the myControl's template-->
<Canvas IsItemsHost="True" x:Name="PART_ItemCanvas"/>
<ItemsControl ItemsSource="{TemplateBinding OtherItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas x:Name="PART_OtherItemCanvas"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl.ItemContainerStyle>
<!-- As used -->
<custom:myControl MaxValue="1000" MinValue="-250">
<custom:myControl.Items>
<Button myControl.Position="0"/>
<SomethingElse myControl.Position="25"/>
<Etc myControl.Position="100"/>
</custom:myControl.Items>
<custom:myControl.OtherItems>
<Button myControl.Position="20"/>
<Label myControl.Position="300"/>
</custom:myControl.OtherItems>
</custom:myControl>
OnPositionChanged
当我无法联系发件人的父母时,我该如何处理来电?我假设这是 WPF 布局控件一直在做的事情,带有像Grid.Row
and这样的附加属性DockPanel.Dock
,但是他们如何管理它呢?