I’ve got two controls, a TextBlock and a Popup. When the user clicks (MouseDown) on the TextBlock, I want to display the Popup.
I thought that I could do this with an EventTrigger on the Popup, but I couldn’t use setters in an EventTrigger, I can only start storyboards. I want to do this strictly in XAML, because the two controls are in a template and I don’t know how I’d find the popup in code.
This is what conceptually I want to do, but can’t because you can’t put a setter in an EventTrigger (like you can with a DataTrigger):
<TextBlock x:Name="CCD">Some text</TextBlock>
<Popup>
<Popup.Style>
<Style>
<Style.Triggers>
<EventTrigger SourceName="CCD" RoutedEvent="MouseDown">
<Setter Property="Popup.IsOpen" Value="True" />
</EventTrigger>
</Style.Triggers>
</Style>
</Popup.Style>
<!-- The rest of the popup content -->
</Popup>
What is the best way to show a popup strictly in XAML when an event happens on a different control?
I used a typical ToggleButton, which I restyled as a textblock by changing its control template. Then I just bound the IsChecked property on the ToggleButton to the IsOpen property on the popup. Popup has some properties like StaysOpen that let you modify the closing behavior.