【发布时间】:2019-10-15 13:22:18
【问题描述】:
我定义了一个样式让所有StackPanel变成绿色:
<Window.Resources>
<Style TargetType="StackPanel">
<Setter Property="Background" Value="Green" />
</Style>
</Window.Resources>
但如果我使用StackPanel 作为面板模板,那么它不是绿色的:
<UniformGrid>
<StackPanel /><!-- this one is green -->
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel /><!-- this one is not -->
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</UniformGrid>
为什么?如何让它也变绿?
【问题讨论】:
-
将隐式
Style移动到App.xaml。 -
模板不是可视化树的一部分,请将 x:Key 添加到您的样式中,然后在 StackPanel 定义中引用它。
-
@mm8,谢谢,这使它在运行时为上述 mcve 工作。有没有机会将样式范围限定为某个控制资源?我希望 StackPanels 仅在某个窗口或用户控件内变为绿色。
-
@XAMlMAX,想法是在父容器上设置样式,以便子容器可以继承它。我不知道模板不是其中的一部分,所以它们不是孩子,所以这行不通。我需要以某种方式从外部传递样式而不明确设置它。 App.xaml 并不是一个真正的选项,因为最多只能为某个用户控件执行此操作。
标签: c# wpf styles datatemplate