弹出图像翻转

时间:2013-10-18 00:55:34

标签: c# wpf mvvm

这是我想要完成的事情:

我有一系列小图像(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> 

1 个答案:

答案 0 :(得分:1)

这是因为每次Trigger属性更改时您的IsMouseOver都会触发,如果Trigger条件失败,它会将Property设置为默认值,即此为false案件。这里你需要两个Triggers,一个用于打开弹出窗口,如果IsMouseOver为真,第二个是在IsMouseOver变为假且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>
            <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>