gpt4 book ai didi

c# - 项目控制 : How To Use FindName within ItemsPanelTemplate to access Panel

转载 作者:行者123 更新时间:2023-11-30 14:40:55 24 4
gpt4 key购买 nike

<Style TargetType="{x:Type local:CustomItemsControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ScrollViewer>
<ItemsPresenter x:Name="PART_Presenter"/>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel x:Name="PART_StackPanel" IsItemsHost="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>

尝试访问 StackPanel 以在子项更改时设置事件。

[TemplatePartAttribute(Name = "PART_StackPanel", Type = typeof(StackPanel))]
[TemplatePartAttribute(Name = "PART_Presenter", Type = typeof(ItemsPresenter))]
public class CustomItemsControl: ItemsControl
{
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var presenter = (ItemsPresenter)this.Template.FindName("PART_Presenter", this);
var stackPanel = (StackPanel)this.ItemsPanel.FindName("PART_StackPanel",this);
}
}

当我尝试定位 StackPanel 时出现异常。

无效操作异常:

This operation is valid only on elements that have this template applied.

请告知是否有办法在 ItemsPanelTemplate 中找到 TemplatePart。我应该什么时候知道何时应用 ItemsPanelTemplate?

最佳答案

另一种选择是在 ItemsPresenter 上调用 .ApplyTemplate(),同时仍在 ItemControl 的 OnApplyTemplate 方法中。然后对 .FindName 的调用将成功。

    [TemplatePartAttribute(Name = "PART_StackPanel", Type = typeof(StackPanel))]
[TemplatePartAttribute(Name = "PART_Presenter", Type = typeof(ItemsPresenter))]
public class CustomItemsControl : ItemsControl
{
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var presenter = (ItemsPresenter)this.Template.FindName("PART_Presenter", this);
presenter.ApplyTemplate();
var stackPanel = (StackPanel)this.ItemsPanel.FindName("PART_StackPanel", presenter);
}
}

关于c# - 项目控制 : How To Use FindName within ItemsPanelTemplate to access Panel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4812576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com