WPF RelativeSource FindAncestor doesn't work outside of the Control.Resources context?
Posted
by sker
on Stack Overflow
See other posts from Stack Overflow
or by sker
Published on 2010-04-23T04:49:24Z
Indexed on
2010/04/23
4:53 UTC
Read the original article
Hit count: 830
I have this VisualBrush resource I took from some site and I apply it with triggers to a TextBox.
<VisualBrush x:Key="HelpBrush" TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left">
<VisualBrush.Visual>
<TextBlock FontStyle="Italic"
Text="{Binding Path=Tag, RelativeSource={RelativeSource AncestorType={x:Type Control}, AncestorLevel=1}}"/>
</VisualBrush.Visual>
</VisualBrush>
<Style x:Key="DefaultText" TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource HelpBrush}"/>
</Trigger>
<Trigger Property="Text" Value="">
<Setter Property="Background" Value="{StaticResource HelpBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
If I place both the VisualBrush and the Style inside the TextBox.Resources tag in XAML, it works fine. But if I take it out and place it in the Window.Resources or a merged dictionary, it stops working.
The problem is the Binding, it doesn't find the ancestor TextBox for some reason. I already tried removing AncestorLevel and using AncestorType={x:Type TextBox} - it doesn't work.
Any ideas?
© Stack Overflow or respective owner