Кнопка с изображением трех состояний не может одновременно работать с мышью и нажата - PullRequest
0 голосов
/ 03 октября 2011

Привет. Я пытаюсь создать кнопку с тремя состояниями, используя три изображения.

Я не могу заставить одновременно работать мышь и нажатые триггеры.В приведенном ниже коде курсор мыши работает нормально, но нажатое изображение не отображается при нажатии кнопки.

<Button x:Name="button"/>
<Button.Template>
       <ControlTemplate TargetType="{x:Type Button}">
             <Grid>
                <Image x:Name="Normal" Source="run.png" Visibility="Visible"/>
                <Image x:Name="Pressed" Source="pressed.png" Visibility="Hidden"/>
                <Image x:Name="Over" Source="over.png" Visibility="Hidden"/>
            </Grid>
      <ControlTemplate.Triggers>
              <Trigger Property="IsPressed" Value="True">
                   <Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
                   <Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
                   <Setter TargetName="Over" Property="Visibility" Value="Hidden"/>
              </Trigger>
              <Trigger Property="IsMouseOver" Value="True">
                   <Setter TargetName="Over" Property="Visibility" Value="Visible"/>
                   <Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
              </Trigger>
              <Trigger Property="IsMouseOver" Value="False">
                   <Setter TargetName="Over" Property="Visibility" Value="Hidden"/>
                   <Setter TargetName="Normal" Property="Visibility" Value="Visible"/>
              </Trigger>
     </ControlTemplate.Triggers>
 </ControlTemplate></Button.Template></Button>

Есть идеи?

1 Ответ

3 голосов
/ 03 октября 2011

Триггеры оцениваются в порядке их появления в XAML, поэтому я думаю, что вам, скорее всего, нужно просто изменить их порядок, как показано ниже:

 <ControlTemplate.Triggers>
          <Trigger Property="IsMouseOver" Value="False">
               <Setter TargetName="Over" Property="Visibility" Value="Hidden"/>
               <Setter TargetName="Normal" Property="Visibility" Value="Visible"/>
          </Trigger>
          <Trigger Property="IsMouseOver" Value="True">
               <Setter TargetName="Over" Property="Visibility" Value="Visible"/>
               <Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
          </Trigger>
          <Trigger Property="IsPressed" Value="True">
               <Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
               <Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
               <Setter TargetName="Over" Property="Visibility" Value="Hidden"/>
          </Trigger>
 </ControlTemplate.Triggers>

Таким образом, настройки IsPressed переопределятIsMouseOver эквивалентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...