I have a custom Expander control called SpecialExpander
. It is basically just a standard Expander
with a fancy header and a couple properties (HeaderText
and IsMarkedRead
).
I began by creating a simple class:
public class SpecialExpander : Expander
{
public string HeaderText { get; set; }
public bool IsMarkedRead { get; set; }
}
Then I created a style that sets a couple properties on the expander (e.g., margins, padding, etc.) and, importantly, it also defines a custom DataTemplate
for the HeaderTemplate
property. The template is basically a grid with two rows.
As shown in the illustrations below...
- for the top row, I'd like a fixed layout (it's always
TextBlock
TextBlock
CheckBox
) - for the bottom row, however, I want to be able to provide custom XAML for each expander.
I tried putting <ContentControl Grid.Row="1" ... />
in the DataTemplate
, but I couldn't figure out how to hook it up properly.
Question
How can I build a DataTemplate
for my SpecialExpander
so that the header has some fixed content (top row) and a place-holder for custom content (bottom row)?
For the second illustration, I would want to be able to do something like this:
<SpecialExpander HeaderText="<Expander Header Text>" IsMarkedRead="True">
<SpecialExpander.Header>
<StackPanel Orientation="Horizontal">
<RadioButton Content="High" />
<RadioButton Content="Med" />
<RadioButton Content="Low" />
</StackPanel>
<SpecialExpander.Header>
<Grid>
<Label>Main Content Goes Here</Label>
</Grid>
</SpecialExpander>