tags:

views:

44

answers:

2

How do I tell a control or block of controls to not inherit any styles and revert back to the defaults?

I need this because I have an overall theme that mostly works, but for one piece really screws up my design.

A: 

This is tricky but you can try this,

  1. Create DefaultStyles resource dictionary
  2. Create named styles of the control you want to retain default style of as following..
<Style x:Key="DefaultButtonStyle" 

TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}"/>

  1. Make sure this DefaultStyles is added before any of your themes are applied, it should be the first entry in your app resources.

  2. Then you can apply style "DefaultButtonStyle" to any control at runtime to retain its default style.

Akash Kava
+3  A: 

You could create your own container for the piece of UI in question, and alter InheritanceBehavior to return SkipAllNow, or whatever is most appropriate for your situation:

public class NoInheritanceContentControl : ContentControl
{
    public MyContainer()
    {
        this.InheritanceBehavior = InheritanceBehavior.SkipAllNow;
    }
}

Then you can just stick NoInheritanceContentControl in your visual tree and anything inside it won't inherit styles.

HTH,
Kent

Kent Boogaart
That sounds promising. It's late, but I'll try that tomorrow.
Jonathan Allen
I couldn't wait. That did exactly what I wanted.
Jonathan Allen