如何在 WPF 中“单击”控件?

Posted

技术标签:

【中文标题】如何在 WPF 中“单击”控件?【英文标题】:How can I "Click Through" a control in WPF? 【发布时间】:2010-11-02 13:30:41 【问题描述】:

我有一个带有ListBox 的订单输入表单,其中包含行项目列表。我有我的项目模板,其中一个值是我的每个项目中的 ComboBox

现在,除了采购订单之外,我的表单还可以创建贷项通知单,但是当我创建贷项通知单时,我想将“贷项通知单”放在列表框上,但是,TextBlock 涵盖了ComboBox 在我的两个订单项中。我想通过TextBlock 将我的点击事件传递给ComboBoxes,但我不知道该怎么做。

这就是我所拥有的,(也许我完全错了,我有点 WPF 的菜鸟)

<ListBox SelectionMode="Single" Grid.Row="2" 
         ItemsSource="Binding Path=LineItems" HorizontalContentAlignment="Stretch" 
         IsSynchronizedWithCurrentItem="True" Background="#66FFFFFF">
    <ListBox.ItemContainerStyle>
        <Style TargetType="x:Type ListBoxItem">
            <Setter Property="Background" Value="WhiteSmoke"/>
            <Setter Property="BorderThickness" Value="1" />
            <Style.Triggers>
                <DataTrigger Binding="Binding Path=IsPartBackOrder" Value="True">
                    <Setter Property="Background" Value="Orange" />
                </DataTrigger>                       
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate DataType="x:Type Entities:SalesOrderLineItem" >
            <OrderEntry:SalesOrderLineItemCreate DataContext="Binding" DeleteSalesOrderLineItem="DeleteSalesOrderLineItem" Margin="0,3,3,0" >
                <OrderEntry:SalesOrderLineItemCreate.Resources>
                    <Style TargetType="x:Type OrderEntry:SalesOrderLineItemCreate">
                        <Style.Triggers>
                            <DataTrigger 
                                    Binding="Binding RelativeSource=
                                      
                                         RelativeSource 
                                         Mode=FindAncestor, 
                                         AncestorType=x:Type ListBoxItem
                                      , 
                                      Path=IsSelected
                                     " Value="True">
                                <Setter Property="Background" Value="LightBlue" />
                                <Setter Property="Foreground" Value="Black" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </OrderEntry:SalesOrderLineItemCreate.Resources>
            </OrderEntry:SalesOrderLineItemCreate>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

<TextBlock Grid.Row="2" 
           Text="Credit Memo" 
           HorizontalAlignment="Center"
           VerticalAlignment="Center"
           FontSize="48" Height="Auto"
           FontStyle="Italic"
           Foreground="Red"
           Opacity=".25">
    <TextBlock.Style>
        <Style TargetType="x:Type TextBlock">
            <Style.Triggers>
                <DataTrigger Binding="Binding Path=OrderType" Value="CR">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
                <DataTrigger Binding="Binding Path=OrderType" Value="CU">
                    <Setter Property="Visibility" Value="Hidden" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

【问题讨论】:

【参考方案1】:
<TextBlock IsHitTestVisible="False" .../>

【讨论】:

有时这是最简单的事情。非常感谢。 IsHitTestVisible 是否通过子对象传播? 子元素可能会将自己的 IsHitTestVisible 设置为 true,但只要容器为 false,它们都不应该注册鼠标事件。

以上是关于如何在 WPF 中“单击”控件?的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF ListView 中,如何防止自动滚动?

如何使 WPF ScrollViewer 中键单击滚动?

您如何检测 WPF 日历控件上的自动月班?

在WPF中UserControl

如何在单击按钮时复制和添加现有的网格元素(C#WPF)

通过WPF中的命令绑定使整个用户控件可单击