我PortItem
派生自ContentControl
,TextedStackPanel
派生自StackPanel
,其中包含PortItems
。在MainWindow
我有2 StackPanels
,其中包含TextedStackPanels
。在PortItem
我已经覆盖了MouseLeftButtonDown
方法。但是,当我这样做时,这种方法不会被解雇。我在论坛中搜索过,发现Background
的{{1}}属性必须设置为透明。我申请了这个,但没有变化。该怎么办 ?
编辑1
我使用部分课程。我有两个课程:Grid/StackPanel
和PortItem.cs
。我修改了这个XAML文件中的任何视觉变化。
编辑2
此外,任何鼠标事件都不会被触发。当我将鼠标放在PortItem.cs.xaml
XAML
PortItem
答案 0 :(得分:0)
编辑:根据您对代码所做的更改,尝试将ClipToBounds =“False”添加到用户控件声明的顶部。
<ContentControl x:Class="**.PortItem" ClipToBounds="False"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:UI="clr-namespace:**.UIData" Width="17" Height="17" Margin="3" SnapsToDevicePixels="True" >
您是否为PortItem创建了模板?我创建了跟随类来复制你的PortItem和base.OnMouseButtonDown行上的断点并且它会触发,我认为你的方法没有执行的原因是因为鼠标没有可视元素实际交互,尝试添加样式在您的应用程序下方,您应该看到该方法正常启动。
public class PortItem: ContentControl
{
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
}
}
然后在XAML中我创建了一个样式来给它渲染一些东西。
<local:PortItem Margin="44,36,156,95">
<local:PortItem.Style>
<Style TargetType="{x:Type local:PortItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:PortItem}">
<Border Background="Transparent">
<ContentPresenter Content="{TemplateBinding Content}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</local:PortItem.Style>
</local:PortItem>
你提到的背景是透明的你可以在边框控件中看到,如果你把背景留下来是正确的,那么事件永远不会发生。
答案 1 :(得分:0)
确保您没有在PortItem上将“IsHitTestVisible”设置为false。此外,请确保其上没有其他控件。如果是,则将其“IsHitTestVisible”属性设置为false,然后您的PortItem控件将获得鼠标右键单击事件。要确保没有任何内容在顶部,请声明将您的PortItem作为添加到TextedStackPanel的最后一项内容。要仔细检查顶部没有其他内容,请将其他控件的背景颜色更改为非常明显的(仅用于测试)以查看是否有任何内容覆盖您的PortItem控件。此外,更改PortItem控件上的颜色以验证它是否真的在您认为的位置。然后,一旦你完成所有工作,将颜色改回原来的颜色。
如果您可以提供XAML的代码示例,那可能会有所帮助。如果您在代码中动态添加PortItems,也请提供该代码。