У меня есть Button
с настраиваемым внешним видом, определяемым ControlTemplate
.Поведение кнопки WPF с использованием триггеров
Он содержит Canvas
, который содержит Path
. Я хотел бы добавить изменения в Path.Opacity
в зависимости от состояния мыши:
- по умолчанию - 0,5
- мыши над, не нажата - 1,0
- мыши на штампованные - 0,5
Первые случаи покрываются просто установкой местного значения Path.Opacity
на 0.5
и добавлением одного Trigger
для IsMouseOver
:
<Button x:Class="ImagingShop.Panosphere.Controls.PathButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="100"
Name="pathButton">
<Button.Template>
<ControlTemplate>
<Canvas Background="Transparent" Width="{TemplateBinding Width}" Height="{TemplateBinding Width}">
<Canvas.Style>
<Style TargetType="Canvas">
<Setter Property="Path.Opacity" Value="0.5"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Path.Opacity" Value="1.0"/>
</Trigger>
</Style.Triggers>
</Style>
</Canvas.Style>
<Path Data="{Binding ElementName=pathButton, Path=PathData}" Stretch="Uniform" Fill="#FFFFFFFF" Width="{TemplateBinding Width}" Height="{TemplateBinding Width}"/>
</Canvas>
</ControlTemplate>
</Button.Template>
<Grid>
</Grid>
</Button>
Однако третий случай не работает. Я добавил следующий триггер:
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="Button.IsPressed" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Path.Opacity" Value="0.75"/>
</MultiTrigger>
Так это должно установить Path.Opacity
к 0.75
является наведение указателя мыши на кнопку И нажатия кнопки.
Я застрял в этом, так как непрозрачность изменена на 0.5
вместо 0.75
! Триггер, кажется, относится, но не работает, как ожидалось ...
Итак - кнопка restyle не может использоваться только с помощью XAML? Кажется, что Button.IsPressed должен работать - есть [пример XAML] (http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.ispressed.aspx), выполняющий именно это , – Libor