RelativeSource and Popup
binding, data-binding, silverlight, wpf
Solution
Popup is like ContextMenu , ToolTip controls , They are not added to the VisualTree. For this you will have to do like
<Grid x:Name="LayoutRoot" Height="100" Width="200" Background="Black">
<Popup Grid.Row="0" x:Name="popup" DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Mode=Self}}">
<TextBlock Text="{Binding DataContext, ElementName=popup}" Background="Red" Width="30" Height="30" />
</Popup>
</Grid>
public MainWindow()
{
InitializeComponent();
DataContext = "abcd";
popup.PlacementTarget = LayoutRoot;
}
I hope this will help.Not like in case of ContextMenu or Tooltip , here you will also have to specify the PlacementTarget.
Problem
The problem is that `RelativeSource` does not work in the following case. I use silverlight 5. ``` //From MainPage.xaml <Grid x:Name="LayoutRoot" Background="White" Height="100" Width="200"> <Popup IsOpen="True"> <TextBlock Text="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType=Grid}}" /> </Popup> </Grid> //From MainPage.xaml.cs public MainPage() { InitializeComponent(); DataContext = "ololo"; } ``` If I set a breakpoint on the binding, I'll get Error: System.Exception: BindingExpression_CannotFindAncestor. If I use `ElementName=LayoutRoot` instead of `RelativeSource`, everything will be OK. Why does the relative source binding not work?