0

这是我想要完成的事情:

我有一系列指示各种系统状态的小图像 (24x24)。当用户翻转图像(例如系统警报图像)时,我希望弹出一个显示前 5 个警报和更多...选项(如果有超过 5 个警报)。显示列表时,我希望用户能够选择其中一个警报或“更多”选项并显示详细信息。

我遇到的问题是:

当鼠标离开图像以选择项目时,我无法阻止弹出窗口消失。

这是我用来显示弹出窗口的用户控件中的一段 XAML。

 <Image x:Name="SmallImage"
               Source="{Binding ElementName=root, Path=ImageSource}"
               Height="{Binding ElementName=root, Path=Height}"
               Width="{Binding ElementName=root, Path=Width}"
               Grid.Row="0" />
        <Popup Name="ItemPopup"
               AllowsTransparency="True"
               PopupAnimation="Fade"
               HorizontalOffset="-35"
               VerticalOffset="0"
               Grid.Row="1">
            <Popup.Style>
                <Style TargetType="{x:Type Popup}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=SmallImage, Path=IsMouseOver, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Value="True">
                            <DataTrigger.Setters>
                              <Setter Property="IsOpen" Value="True" />

                           </DataTrigger.Setters>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Popup.Style>
            <Border x:Name="MyBorder" BorderBrush="#72777F" Background="White" BorderThickness="1,1,1,1" CornerRadius="5,5,5,5">
                <Grid>
                    <Label Content="This is your list of items."></Label>
                </Grid>
            </Border>
        </Popup> 
4

1 回答 1

1

这是因为您Trigger将在每次IsMouseOver属性更改时触发,如果Trigger条件失败,它将设置Property为默认值,即在这种情况下为 false。您将需要两个Triggers,一个用于在为 true 的情况下打开弹出窗口,第二个是在变为 false 且已打开的情况下IsMouseOver保持弹出窗口打开。IsMouseOverPopup

         <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=SmallImage, Path=IsMouseOver, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Value="True">
                <DataTrigger.Setters>
                    <Setter Property="IsOpen" Value="True" />
                </DataTrigger.Setters>
            </DataTrigger>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding ElementName=SmallImage, Path=IsMouseOver, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Value="False"/>
                    <Condition Binding="{Binding IsOpen, RelativeSource={RelativeSource Self}}" Value="True"/>
                </MultiDataTrigger.Conditions>
                <Setter Property="IsOpen" Value="True" />
            </MultiDataTrigger>
        </Style.Triggers>
于 2013-10-18T02:22:16.993 回答