Steve,
The issue is related to the two expanders sharing an instance of the style,
which has an instance of the grid with your textbox. Applying the style twice
tries to reuse the grid instance.
An alternative is to define a DataTemplate for your header content and then
have your style set HeaderTemplate to that StaticResource in your template.
<Grid.Resources>
<DataTemplate x:Key="HeaderFoo">
<Grid>
<TextBlock Text="Foo" />
</Grid>
</DataTemplate>
<Style x:Key="ExpanderStyle" TargetType="Expander">
<Setter Property="HeaderTemplate" Value="{StaticResource
HeaderFoo}"/>
</Style>
</Grid.Resources>
Regards
Shannon
________________________________
From: [email protected] [[email protected]] on behalf of
Matt Hamilton [[email protected]]
Sent: Monday, 12 December 2011 11:52 AM
To: ozWPF
Subject: Re: Expander Header via style throws error
Steve,
Set your style to be non-shared so it has its own instance across both
expanders:
<Style x:Key="ExpanderStyle" x:Shared="False" TargetType="Expander">
HTH,
Matt
From: Steven Nagy<mailto:[email protected]>
Sent: Monday, December 12, 2011 12:21 PM
To: [email protected]<mailto:[email protected]>
Subject: Expander Header via style throws error
Hiyas,
Really simple to recreate this issue, just paste in this code to a new WPF
project:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.Resources>
<Style x:Key="ExpanderStyle" TargetType="Expander">
<Setter Property="Header">
<Setter.Value>
<Grid>
<TextBlock Text="Foo" />
</Grid>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Expander Style="{StaticResource ExpanderStyle}" />
<Expander Style="{StaticResource ExpanderStyle}" Grid.Row="1" />
</Grid>
Essentially, 2 expanders using the same style to set the header.
Throws this exception: “'Set property 'System.Windows.FrameworkElement.Style'
threw an exception.' Line number '23' and line position '10'”
Inner exception: “Specified element is already the logical child of another
element. Disconnect it first.”
However if you sacrifice the complex header content for something simple like
this, it works fine:
<Setter Property="Header" Value="Foo" />
Any ideas why this is the case?
Using style inheritance from the same base style causes same issue.
However if I blanket copy paste the style with a new name and point the
expander to that, then it also works fine. So it’s not the header content
that’s the problem specifically.
I’m guessing some sort of virtualisation similar to what the tab control does
with tab pages under binding scenarios; it is using the same actual Grid
control and applying it to both headers, thus the inner exception above. No
idea how to fix it though (other than copying pasting styles which I really
don’t want to do).
Cheers,
Steve
________________________________
_______________________________________________
ozwpf mailing list
[email protected]
http://prdlxvm0001.codify.net/mailman/listinfo/ozwpf
_______________________________________________
ozwpf mailing list
[email protected]
http://prdlxvm0001.codify.net/mailman/listinfo/ozwpf