Wpf 网格控件的子按钮并不总是出现在鼠标悬停事件上

Wpf 网格控件的子按钮并不总是出现在鼠标悬停事件上,wpf,Wpf,我正在使用DevExpress WPF控件,但这个问题似乎更符合直接WPF的上下文 我使用的是一个DevExpress网格控件,其中一列包含一个WPF网格(vendormangrid),其中有一个ComboBoxEdit和一个SimpleButton(MainButton)作为子控件,每个子控件都位于自己的网格列中 此外,ComboBoxEdit的下拉列表中的每个项都由一个网格(VendorItemGrid)组成,其中包含一个文本块和一个SimpleButton(ItemButton)作为子控件

我正在使用DevExpress WPF控件,但这个问题似乎更符合直接WPF的上下文

我使用的是一个DevExpress网格控件,其中一列包含一个WPF网格(vendormangrid),其中有一个ComboBoxEdit和一个SimpleButton(MainButton)作为子控件,每个子控件都位于自己的网格列中

此外,ComboBoxEdit的下拉列表中的每个项都由一个网格(VendorItemGrid)组成,其中包含一个文本块和一个SimpleButton(ItemButton)作为子控件,同样每个项都位于其自己的网格列中

两个SimpleButton都使用一个DataTrigger来检查父网格的“IsMouseOver”属性的值,如果该值为真,SimpleButton的可见性将设置为可见

我试图创建这样一种行为,即在父网格的任何部分(vendormangrid或VendorItemGrid)的鼠标事件上,网格子SimpleButton变得可见

然而,我看到的行为是,SimpleButton只有在光标位于TextBlock或ComboBoxEdit上时才可见。SimpleButton是其父网格的子网格,考虑到DataTrigger,我不理解为什么当光标位于SimpleButton上时,SimpleButton不可见

定义此列的DataTemplate如下所示:

        <DataTemplate x:Key="VendorComboColumnTemplate">
        <ContentControl>
            <dxg:GridColumn 
                Binding="{Binding RowData.Row.SelectedVendor, Mode=TwoWay}"
                Header="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Header, RelativeSource={RelativeSource Self}}" 
                Width="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Width, RelativeSource={RelativeSource Self}}">
                <dxg:GridColumn.CellTemplate>
                    <DataTemplate>
                        <Grid Name="VendorMainGrid" HorizontalAlignment="Stretch">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>

                            <!--The VendorMainGrid ComboBox-->
                            <dxe:ComboBoxEdit
                                Grid.Column="0"
                                IsTextEditable="False"
                                SelectedItem="{Binding RowData.Row.SelectedVendor, Mode=TwoWay}"
                                ItemsSource="{Binding RowData.Row.VendorList, Mode=TwoWay}"
                                >
                                <dxe:ComboBoxEdit.ItemContainerStyle>
                                    <Style TargetType="dxe:ComboBoxEditItem">
                                        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                                    </Style>
                                </dxe:ComboBoxEdit.ItemContainerStyle>

                                <!--The dropdown list item template-->
                                <dxe:ComboBoxEdit.ItemTemplate>
                                    <DataTemplate>
                                        <Grid Name="VendorItemGrid" HorizontalAlignment="Stretch">
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="Auto"/>
                                            </Grid.ColumnDefinitions>

                                            <TextBlock Grid.Column="0" HorizontalAlignment="Left" Text="{Binding}" />

                                            <dx:SimpleButton Grid.Column="1" Padding="0" Width="20" Height="20"
                                                Name="ItemButton"
                                                Command="{Binding Path=(dxe:BaseEdit.OwnerEdit).DataContext.RowData.Row.DeleteVendorCommand, RelativeSource={RelativeSource Self}}"
                                                CommandParameter="{Binding}"
                                                >
                                                <dx:SimpleButton.Content>
                                                    <Image Source="{dx:DXImage Image=Delete_16x16.png}"/>
                                                </dx:SimpleButton.Content>

                                                <dx:SimpleButton.Style>
                                                    <Style TargetType="dx:SimpleButton">
                                                        <Setter Property="Visibility" Value="Hidden"/>
                                                        <Style.Triggers>
                                                            <DataTrigger Binding="{Binding ElementName=VendorItemGrid,Path=IsMouseOver}" Value="True">
                                                                <Setter Property="Visibility" Value="Visible" />
                                                            </DataTrigger>
                                                        </Style.Triggers>
                                                    </Style>
                                                </dx:SimpleButton.Style>
                                            </dx:SimpleButton>

                                        </Grid>
                                    </DataTemplate>
                                </dxe:ComboBoxEdit.ItemTemplate>
                            </dxe:ComboBoxEdit>

                            <!--The VendorMainGrid Button-->
                            <dx:SimpleButton Grid.Column="1" Padding="0" Width="20" Height="20"
                                Name="MainButton"
                                Command="{Binding RowData.Row.AddVendorCommand}"
                                >
                                <dx:SimpleButton.Content>
                                    <Image Source="{dx:DXImage Image=Add_16x16.png}"/>
                                </dx:SimpleButton.Content>

                                <dx:SimpleButton.Style>
                                    <Style TargetType="dx:SimpleButton">
                                        <Setter Property="Visibility" Value="Hidden"/>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding ElementName=VendorMainGrid,
                                                   Path=IsMouseOver}" Value="True">
                                                <Setter Property="Visibility" Value="Visible" />
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </dx:SimpleButton.Style>

                            </dx:SimpleButton>
                        </Grid>
                    </DataTemplate>
                </dxg:GridColumn.CellTemplate>
            </dxg:GridColumn>
        </ContentControl>
    </DataTemplate>

请有人指出我为什么会看到这种行为,以及我需要如何更改数据模板以获得我想要的行为


非常感谢您的帮助

我刚刚发现鼠标悬停不能像我希望的那样工作的原因是我没有为父网格声明背景值。默认情况下,没有任何背景的控件的background属性设置为“null”,这使得无法命中测试

为了解决这个问题,我只需要在父网格控件上声明Background=“Transparent”,这将允许命中测试工作并检测鼠标