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

12,901

Solution 1

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

Solution 2

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);

Solution 3

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));
Share:
12,901
Fredrik Hedblad
Author by

Fredrik Hedblad

http://meleak.wordpress.com. If you have any questions you can reach me at [email protected]

Updated on June 19, 2022

Comments

  • Fredrik Hedblad
    Fredrik Hedblad almost 2 years

    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

  • Fredrik Hedblad
    Fredrik Hedblad about 13 years
    Thanks for your answer! Yes, I hoped that would work to but the Theme Style isn't picked up for some reason. If I do it in Xaml it works..