我花了几个小时才弄清楚这个问题的答案,所以我想我会写一个常见问题解答或回答我发现的问题。(它是基于以下线程Binding Textbox IsFocused to Popup IsOpen 加上附加条件)
我发现了很多将弹出窗口绑定到切换按钮和其他基于 windows chrome 并具有内置触发器的示例的示例。但在我的应用程序中,我想将一个弹出窗口绑定到一个带有自定义画笔填充的简单矩形。当用户将鼠标悬停在矩形上时,我找不到有关如何打开弹出窗口并保持打开状态的示例。
所以我发布了这个问题,我会立即发布我找到的答案,希望其他人可以从中受益。我还将为任何可以帮助我了解 stackoverflow 是否允许这样的帖子,或者我本可以解决的更好方法的人标记一个答案。
编辑 1)
我无法在 8 小时内自行回答,所以这是工作代码:以下是如何在基本 UIElement(如矩形/椭圆/等)上使用弹出窗口的简单示例...
<Grid HorizontalAlignment="Stretch" Height="Auto">
<Rectangle x:Name="PopupRec"
Grid.Row="0"
Width="20" Height="20"
HorizontalAlignment="Right"
Fill="Gray" Margin="0,0,0,10" />
<Popup x:Name="SortPopup"
PlacementTarget="{Binding ElementName=PopupRec}"
StaysOpen="False"
PopupAnimation="Slide"
AllowsTransparency="True">
<Border Background="White" Padding="15">
<StackPanel Orientation="Vertical">
<Button Command="{Binding MyCommand}" CommandParameter="5">5</Button>
<Button Command="{Binding MyCommand}" CommandParameter="10">10</Button>
<Button Command="{Binding MyCommand}" CommandParameter="15">15</Button>
<Button Command="{Binding MyCommand}" CommandParameter="20">20</Button>
</StackPanel>
</Border>
<Popup.Style>
<Style TargetType="{x:Type Popup}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=PopupRec, Path=IsMouseOver}" Value="True">
<Setter Property="IsOpen" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=SortPopup, Path=IsMouseOver}" Value="True">
<Setter Property="IsOpen" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</Popup.Style>
</Popup>
</Grid>
只需将其粘贴到窗口/用户控件/等...