【发布时间】:2013-11-13 20:01:30
【问题描述】:
我正在使用自定义项控件中的自定义面板(从列表框派生的 DisplayPanelControl),样式类似于以下 XAML
<Style x:Key="ContainerStyle" TargetType="{x:Type local:DisplayPanelControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<local:CustomePanel Background="AliceBlue" IsItemsHost="True">
</local:CustomePanel>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
CustomePanel 有一个属性 Edgblending。我想通过我的 Items 控件设置此属性,因此我重写了 OnApplyTemplate() 方法并使用 VisualTreeHelper 来查找我的 customPanel 作为设置所需的属性。
请问有没有更好的方案通过Itemscontrol在ItemsPanel上设置属性?
【问题讨论】:
-
您可以使用
TemplateBinding,但我不清楚您的财产价值来自哪里。 -
感谢您查看@HighCore,我的价值来自itemscontrol,而itemscontrol 又从数据绑定中获取价值。不太确定模板绑定是否会起作用,因为我也可以在 Itempanel 标记中单独设置项目面板。但会检查并通知您。
-
嗨@HighCore,模板绑定以我上面提到的样式工作,但是当我明确设置
属性时它不起作用。 -
如果您已经将 CustomPanel 定义为模板的一部分,则无需再次覆盖
ItemsPanelTemplate。 -
@HighCore,同意,但由于它是一个项目控件,我可以在新的控件模板或样式中覆盖 ItemsPanel。并且 itemsComtrol 将开始引发异常。因此,检查 ItemsControl 中的面板类型对我来说很重要,如果它是我的自定义面板,那么我将设置所需的属性。
标签: c# wpf wpf-controls