2011-03-04 30 views
15

如何在后面的代码中设置以下代码?BasedOn =“{StaticResource {x:Type TextBox}}”代码后面的样式

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 

我在App.xaml中使用合并的主题。它适用于所有控件,但是当我为一些东西定义样式时,例如TextBox,除非我使用上面的BasedOn,否则主题样式不会被拾取,而是会获取默认的TextBox样式。

现在我在代码中创建一个DataGridTextColumn后面,我不能让BasedOn部分为EditingElementStyle

Style editingStyle = new Style(typeof(TextBox)); 
editingStyle.BasedOn = ...?; 

任何建议工作?此外,有没有什么办法可以获得主题样式,而不是使用默认样式而不使用BasedOn?

感谢

+0

您正在试图获得应用于给定控制的主题,并有当地的风格来越过它会影响主题的组件? – 2011-03-04 15:07:11

+0

@Aaron:我使用影响所有控件的主题。但在许多地方,我需要添加特定的setter,触发器等。例如,在ListBox的ItemContainerStyle中绑定'ListBoxItem.IsSelected'。我想要一个额外的二传手应用主题风格 – 2011-03-04 15:12:03

回答

22

试试这个:

editingStyle.BasedOn = (Style) FindResource(typeof (TextBox)) 

而且我不不管你怎么知道c使其应用主题风格而不指定BasedOn。如果有这样的方式,我也想知道它...

2

这应该工作:

Style baseStyle = new Style(typeof(TextBox)); 
Style editingStyle = new Style(typeof(TextBox)); 
editingStyle.BasedOn = baseStyle; 

你也可以做到这一点在构造函数:

Style editingStyle = new Style(typeof(TextBox), baseStyle); 
+0

感谢您的回答!是的,我希望这可以工作,但主题风格不会因为某种原因被拿起。如果我在Xaml中使用它,它可以工作。 – 2011-03-04 14:58:17

相关问题