1

我正在为程序编写自定义控件。除其他外,该控件的模板中有一个 ComboBox。像这样简单的东西可以重现:

 <Style TargetType="{x:Type local:CustomControl1}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <ComboBox />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如果我右键单击此控件,则会引发 PreviewMouseRightButtonUp 事件,但不会引发 MouseRightButtonUp 事件。我认为这是因为 ComboBox 控件在其自己的 PreviewMouseRightButtonUp 事件中将 e.Handled 设置为 true,从而防止引发其他事件。我之所以猜测是因为如果我将一个 Rectangle 换成 ComboBox,我会得到两个事件,并且如果在我的自定义控件中我在 Preview 事件中将 e.Handled 设置为 true,我只会得到 preview 事件。

我正在为其编写控件的程序期望在发生右键单击时引发这两个事件,我怀疑我能否让它们改变这一点。我是否必须以不吃预览事件的方式重新创建 ComboBox,还是有其他技巧?

4

1 回答 1

0

您实际上可以接收在UIElement.Addhandler调用中传递 true 的已处理事件。如果它被处理,你可以引发一个新事件?

AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(OnMouseLeftButtonDow), true);

您可以使用snoop查看是否设置了 e.Handled=true;

于 2012-10-03T21:07:44.857 回答