在样式的代码背后的BasedOn =“{StaticResource {x:Type TextBox}}”

时间:2011-03-04 14:29:41

标签: c# wpf xaml styles basedon

如何在代码中设置以下内容?

<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?

由于

3 个答案:

答案 0 :(得分:24)

试试这个:

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

我不知道如何在不指定BasedOn的情况下应用主题样式。如果有这样的方式,我也想知道...

答案 1 :(得分:3)

这应该有效:

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

您也可以在构造函数中执行此操作:

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

答案 2 :(得分:0)

我喜欢answer of Pavlo Glazkov,但它没有编译。

FindResource是(non-static) member of FrameworkElement。 需要识别搜索请求的上下文。

所以我推荐这个:

style.BasedOn = (Style)frameworkElement.FindResource(typeof(TextBox));