1
votes

I have a customized Textbox which has some property SelfPropertyInfo(which further has some property like IsValid and RuleDescription).

I am trying to add below style on every Textbox of this type.

<Style TargetType="{x:Type CustomControls:TextBox}">
            <Setter Property="Height" Value="22"/>
            <Setter Property="Margin" Value="2,2,2,2"/>
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Background" Value="DarkGray" />
                </Trigger>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=SelfPropertyInfo.IsValid}" Value="False">
                    <Setter Property="BorderBrush" Value="Red"/>
                    <Setter Property="BorderThickness" Value="1"/>
                    <Setter Property="ToolTip" >
                        <Setter.Value>
                            <ToolTip >                                
                                <TextBlock Foreground="Red" Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type CustomControls:TextBox},AncestorLevel=2},Path=SelfPropertyInfo.RuleDescription}"/>
                             </ToolTip>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
 </Style>

In above code I am not getting Tooltip Text. (Result of below code)

<TextBlock Foreground="Red" Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type CustomControls:TextBox},AncestorLevel=2},Path=SelfPropertyInfo.RuleDescription}"/>

I am getting below error:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='CustomControls.TextBox', AncestorLevel='2''. BindingExpression:Path=SelfPropertyInfo.RuleDescription; DataItem=null; target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

Can anybody suggest the mistake I did in Text binding?

Note: I can't change the way Tooltip is added :(

1
Do you need AncestorLevel in there?Mike Eason
Does it work if you remove the AncestorLevel? Are you sure it's level 2?nkoniishvt
It also doesn't work if I remove AncestorLevel :(A K P
@AKP Here is an answer: stackoverflow.com/a/3668699/4049478 The tooltip is not part of the visual treenkoniishvt
It doesn't work. See what I did: 1. Added a setter - <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource Self},Path=SelfPropertyInfo.RuleDescription}"/> 2. Set DataContext of tooltip : <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self},Path=PlacementTarget.Tag}"> 3. Changed the TextBlock's text: <TextBlock Foreground="Red" Text="{Binding RelativeSource={RelativeSource Self},Path=SelfPropertyInfo.RuleDescription}"/>A K P

1 Answers

2
votes

First of all I would like to say thanks to nkoniishvt for this link. It helped me to understand the problem. By using below code it worked as expected:

<Style TargetType="{x:Type CustomControls:TextBox}">
            <Setter Property="Height" Value="22"/>
            <Setter Property="Margin" Value="2,2,2,2"/>
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Background" Value="DarkGray" />
                </Trigger>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=SelfPropertyInfo.IsValid}" Value="False">
                    <Setter Property="BorderBrush" Value="Red"/>
                    <Setter Property="BorderThickness" Value="1"/>
                    <Setter Property="Tag" Value= "{Binding RelativeSource={RelativeSource Self}}"/>
                    <Setter Property="ToolTip">
                        <Setter.Value>
                            <ToolTip Height="28" Background="Red" DataContext="{Binding RelativeSource={RelativeSource Self},Path=PlacementTarget.Tag}">
                                <TextBlock Foreground="White" Text="{Binding Path=SelfPropertyInfo.RuleDescription}"/>
                            </ToolTip>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
  </Style>