iv'e 有一个从堆栈面板派生的自定义面板
这个面板有一个布局逻辑,它取决于面板的垂直对齐
CS :
public class ReArrangeStackPanel : StackPanel
{
protected override Size ArrangeOverride(Size arrangeSize)
{
double delta = this.VerticalAlignment == System.Windows.VerticalAlignment.Bottom
? CalcForBottom() : CalcForTop();
ChildrenArrangement(delta);
return base.ArrangeOverride(arrangeSize);
}
1)我希望 ItemsPanel 的 VerticalAligment 属性继承自它是子项的项控件,似乎它没有,因为它设置为默认的“Stretch”值。
2)即使在 ItemsPanel 上显式设置 VerticalAlignment 时,如果我不硬编码,则在 ArrangeOverride 范围内将 VerticalAlignment 的值设置为“Stretch”,并且仅在稍后(我使用 snoop 观察)设置为“Bottom”价值 。
XAML:
a) 不起作用:使用绑定,设置值但仅在 ArrangeOverride 之后。
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<local:ReArrangeStackPanel
VerticalAlignment="{Binding Path=VerticalAlignment,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:PipeControl}}}" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
b) 工作:明确硬编码值。
<ItemsPanelTemplate>
<local:ReArrangeStackPanel VerticalAlignment="Bottom" />
</ItemsPanelTemplate>
在我的 Windows XAML 中, ItemsControl (PipeControl) 设置为所需的 VerticalAlignment 。
所以我的问题:
1)为什么没有继承价值?
2)为什么在 ArrangeOverride 发生之前没有通过绑定设置值?
提前致谢 。