Я создал пользовательскую кнопку с эффектом зависания/щелчка. Я не знаю, почему события мыши не работают с этим. Overrideen обработчики событий в определении класса все еще работают.Нестандартное управление событие
Вот XAML таможенного контроля:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CSOCodeBox_WPF">
<Style TargetType="{x:Type local:HoverButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:HoverButton}">
<Rectangle x:Name="btnImage" HorizontalAlignment="Left" VerticalAlignment="Top" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
<Rectangle.Fill>
<ImageBrush ImageSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Image}"/>
</Rectangle.Fill>
</Rectangle>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="btnImage" Property="Fill">
<Setter.Value>
<ImageBrush ImageSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=HoverImage}"/>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsMouseCaptured" Value="True">
<Setter TargetName="btnImage" Property="Fill">
<Setter.Value>
<ImageBrush ImageSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=PressImage}"/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Добавить управление главного окна:
<my:HoverButton x:Name="hoverButton1" Width="201" Height="121" Canvas.Left="235" Canvas.Top="500" Image="/CSOCodeBox_WPF;component/GFX/Button_None.png" HoverImage="/CSOCodeBox_WPF;component/GFX/Button_Ready.png" PressImage="/CSOCodeBox_WPF;component/GFX/Button_Clicking.png" MouseDown="hoverButton1_MouseDown_1"></my:HoverButton>
Событие:
private void hoverButton1_MouseDown_1(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Button clicked");
}
Спасибо, это сработало;) –
Btw, что бы подавить разгромленные события? –
@BienPham Я могу сказать прямо, что эти два типа не являются независимыми. Во-первых, сначала запускается событие туннелирования (Preview), например PreviewMouseDown, и при туннелировании это может быть подавлено. Но если туннельному событию удастся добраться до исходного объекта, который его выпустил, пузырьковое (нормальное) событие, такое как MouseDown, будет срабатывать от источника и протекать до элемента верхнего уровня (Window). Что касается подавления событий, некоторые из элементов вашей иерархии могут быть причиной. Но вы всегда можете обрабатывать события туннелирования. :) – mrahhal