添加为 LogicalChild 时,不应用内容演示器资源



我的自定义控件派生自ContentControl,并具有类型为 FrameworkElement
的附加依赖项属性"附加内容"。此属性绑定到具有自定义样式资源的样式ContentPresenter

<ContentPresenter ContentSource="AdditionalContent">
  <ContentPresenter.Resources>
    <Style TargetType="{x:Type Button}">
      ... some setters ...
    </Style>
  </ContentPresenter.Resources>
</ContentPresenter>

正如我从此处的其他问题中了解到的那样,我必须通过调用 AddLogicalChild(AdditionalContent) 并重写LogicalChildren属性来将此对象添加为我的控件的逻辑子对象。

现在,如果我像这样使用我的控件

<MyControl>
  <MyControl.AdditionalContent>
    <Button .../>
  </MyControl.AdditionalContent>
</MyControl>

不应用Button样式。这是正确的行为,因为风格继承(见这个答案(。所以我必须在我定义AdditionalContent的地方应用样式。目前为止,一切都好。

但是奇怪的行为:当我省略将对象添加为逻辑子对象时,应用样式。
为什么会这样?有没有一种正确的方法可以为AdditionalContent中的所有内容提供样式,类似于定义Toolbar样式?

很难说,因为您省略了大部分按钮定义,但请尝试将按钮的样式设置为将按钮类型作为资源键的动态资源。

<Button Style="{DynamicResource {x:Type Button}}"/>

像您所做的那样添加没有资源键的默认样式时,隐式键是数据类型。

通过将样式设置为动态资源,表明资源在运行时可能会更改,当您像现在一样在运行时将其插入树中时就是这种情况。

相关内容

  • 没有找到相关文章

最新更新