20

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

<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 的情况下获得主题样式而不是默认样式?

谢谢

4

3 回答 3

26

尝试这个:

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

而且我不知道如何在不指定BasedOn. 如果有这样的方法,我也想知道……

于 2011-03-04T15:02:52.437 回答
5

这应该有效:

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

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

Style editingStyle = new Style(typeof(TextBox), baseStyle);
于 2011-03-04T14:53:51.170 回答
2

我喜欢Pavlo Glazkov 的答案,但它无法编译。

FindResource 是FrameworkElement 的(非静态)成员。需要识别搜索请求的上下文。

所以我推荐这个:

style.BasedOn = (Style)frameworkElement.FindResource(typeof(TextBox));
于 2016-08-18T15:34:38.353 回答