Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

BasedOn="{StaticResource {x:Type TextBox}}" in Code Behind for Style

How can you set the following in code behind?

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

I'm using a Theme merged in App.xaml. It works great for all Controls but when I define a Style for something, e.g. TextBox, the Theme Style doesn't get picked up unless I use BasedOn like above, instead it gets the default TextBox Style.

Now I'm creating a DataGridTextColumn in code behind and I can't get the BasedOn part to work for the EditingElementStyle

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

Any suggestions? Also, is there any way to get the Theme Style instead of the default Style applied without using BasedOn?

Thanks

like image 361
Fredrik Hedblad Avatar asked Mar 04 '11 14:03

Fredrik Hedblad


3 Answers

Try this:

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

And I don't know any way how you can make it apply the Theme style without specifying BasedOn. If there is such a way, I would like to know it too...

like image 149
Pavlo Glazkov Avatar answered Sep 28 '22 14:09

Pavlo Glazkov


This should work:

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

You can also do it in the constructor:

Style editingStyle = new Style(typeof(TextBox), baseStyle);
like image 26
Edwin de Koning Avatar answered Sep 28 '22 16:09

Edwin de Koning


I like the answer of Pavlo Glazkov, but it does not compile.

FindResource is (non-static) member of FrameworkElement. It is required to identify the context of the search request.

So I recommend this:

style.BasedOn = (Style)frameworkElement.FindResource(typeof(TextBox));
like image 43
lg2de Avatar answered Sep 28 '22 15:09

lg2de