MVVM - 如何显示在鼠标悬停在DataGrid中弹出在一排按钮 [英] MVVM - How to show a Popup in DataGrid on MouseOver on a Button in Row

查看:86
本文介绍了MVVM - 如何显示在鼠标悬停在DataGrid中弹出在一排按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的代码,其中一个DataGrid是从我的ViewModel填充数据。 DataGrid中可以有多个行的每一行有一个按钮。

I have the following code where a DataGrid is populating the data from my ViewModel. DataGrid can have multiple rows each row have a Button.

我要显示一个弹出,当用户将鼠标悬停在该按钮。(目前我弹出不工作)

I want to show a popup when user will Mouse over on that button.(Currently my Popup is not working)

我是新来WPF,所以请考虑这帮助我。 :)

I am new to WPF, so please help me by considering this. :)

非常感谢你!

<Grid DataContext="{StaticResource Windows1ViewModel}">
    <StackPanel Orientation="Vertical"
                Margin="20"
                HorizontalAlignment="Center"
                VerticalAlignment="Top">
        <Button Content="Refresh"
                Style="{StaticResource ButtonStyle1}"
                HorizontalAlignment="Left"
                Command="{Binding RefreshDateCommand}" />
        <TextBlock Text="{Binding MyDateTime}" />
        <Button Name="rndm" Content="Randomize Grid Data"
                HorizontalAlignment="Left"
                Margin="0 20 0 0"
                Command="{Binding RefreshPersonsCommand}" />
        <DataGrid ItemsSource="{Binding PersonsCollection}"
                  AutoGenerateColumns="False"
                  CanUserAddRows="False">
            <DataGrid.Columns>                    
                <DataGridTextColumn Binding="{Binding Name, Mode=TwoWay,
                                    UpdateSourceTrigger=PropertyChanged}"
                                    Header="Name (string)" />
                <DataGridTextColumn Binding="{Binding Age}"
                                    IsReadOnly="True"
                                    Header="Age (int)" />
                <DataGridTemplateColumn Header=" "
                                        IsReadOnly="True">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Grid>
                                <Button Name="btnAdditionalInformation" Content="AI"
                                       Width="40"
                                       Height="20">
                                </Button>
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <Grid >
                                <Popup x:Name="popUp" 
                            PlacementTarget="{Binding ElementName= 
                                             btnAdditionalInformation}" 
                            IsOpen="True" Width="200" Height="100">
                                    <StackPanel Orientation="Vertical"
                                                Background="Gray" >
                                        <TextBlock Text="asdf"></TextBlock>
                                        <Button Content="button1"/>
                                    </StackPanel>
                                </Popup>
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>
                <DataGridCheckBoxColumn Binding="{Binding IsMarried, Mode=TwoWay,
                                        UpdateSourceTrigger=PropertyChanged}"
                                        Header="IsMarried (bool)" />
                <DataGridTextColumn Binding="{Binding Height, Mode=TwoWay, 
                                    UpdateSourceTrigger=PropertyChanged}"
                                    Header="Height (double)" />
                <DataGridTextColumn Binding="{Binding BirthDate}"
                                    IsReadOnly="True"
                                    Header="BirthDate (DateTime)" />
                <DataGridTemplateColumn Header="FavoriteColor (SolidColorBrush)"
                                        IsReadOnly="True">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Grid Background="{Binding FavoriteColor}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

        <Button Content="can execute command?"
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                Margin="0 20 0 0"
                Command="{Binding DoNothingCommand}" />
    </StackPanel>

</Grid>



推荐答案

下面是一个简单的例子:

Here is a simple example:

<StackPanel>
    <Button x:Name="btn" Content="Button"/>
    <Popup AllowsTransparency="True" Placement="Mouse" IsOpen="{Binding Path=IsMouseOver, ElementName=btn, Mode=OneWay}">
        <Border Background="DarkGray">
            <TextBlock Text="Popup"/>
        </Border>
    </Popup>
</StackPanel>

这将打开弹出时,鼠标移动到按钮上并关闭它,当它不是。但是,如果你需要这种行为,你应该考虑使用工具提示来代替。

This will open popup when mouse is over the button and close it, when its not. However if you need that kind of behavior you should consider using a tooltip instead.

这篇关于MVVM - 如何显示在鼠标悬停在DataGrid中弹出在一排按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆