2011-10-17 2 views
4

Я хочу изменить изображение кнопки при нажатии кнопки IsEnabled == False.Изменение изображения кнопки при IsEnabled

Ниже приводится мой пример, привязки в порядке, когда я меняю их на False/True, он все еще не работает.

<Button x:Name="btnBackward" Grid.Column="0" Grid.Row="2" Command="{Binding UserWorkflowManager.NavigateBackward}" IsEnabled="{Binding UserWorkflowManager.NavigateBackwardEnable}" Grid.RowSpan="2"> 
    <Button.Template> 
     <ControlTemplate> 
      <Image Name="_image" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform"> 
       <Image.Style> 
        <Style TargetType="Image"> 
         <Setter Property="Source" Value="/UserWorkflow.View;component/Images/LDC500_butX_PreviousPane_norm.bmp" /> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding ElementName=btnBackward, Path=IsEnabled}" Value="False"> 
            <Setter Property="Source" Value="/UserWorkflow.View;component/Images/LDC500_butX_PreviousPane_dis.bmp"/> 
           </DataTrigger> 
          </Style.Triggers> 
        </Style> 
       </Image.Style> 
      </Image> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

ответ

6

Попробуйте следующее

<Style.Triggers> 
    <DataTrigger Binding="{Binding IsEnabled,RelativeSource={RelativeSource AncestorType=Button}}" Value="False"> 
     <Setter Property="Source" Value="/UserWorkflow.View;component/Images/LDC500_butX_PreviousPane_dis.bmp"/> 
    </DataTrigger> 
</Style.Triggers> 

Или добавить триггер непосредственно в шаблоне управления как так

  <ControlTemplate> 
       <Image Name="_image" HorizontalAlignment="Center"> 
       .......... 
       </Image> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter TargetName="_image" Property="Source" Value="/UserWorkflow.View;component/Images/LDC500_butX_PreviousPane_dis.bmp" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
+1

Оба решения не удалось :( –

+0

я проверил оба метода Check ваши привязки. –

+0

Привязки в порядке, даже если я установил True/False, он не работает. –

2

Попробуйте это:

<Button x:Name="btnBackward" Grid.Column="0" Click="btnBackward_Click"> 
     <Button.Template> 
      <ControlTemplate> 
       <Image Name="_image" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform"> 
        <Image.Style> 
         <Style TargetType="Image"> 
          <Setter Property="Source" Value="/Images/0.png" /> 
         </Style> 
        </Image.Style> 
       </Image> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Source" Value="/Images/1.png" TargetName="_image"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 

     </Button.Template> 
    </Button> 

Вы должны указать «Имя_целевого_объекта "свойство для сеттера внутри" ControlTemp late.Triggers "

0

Суть заключается в использовании RelativeSource={RelativeSource Self}} в вашем DataTrigger.

<DataTrigger 
    Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}}" 
    Value="False"> 

Пример

Добавить этот стиль:

<Style x:Key="MainButtonStyle" TargetType="Button" BasedOn="{StaticResource ChromelessButtonStyle}"> 
    <Setter Property="Foreground" Value="Black" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}}" Value="True"> 
      <Setter Property="Background" Value="Green" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}}" Value="False"> 
      <Setter Property="Background" Value="Blue" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Затем применить этот стиль к кнопке:.

<Button x:Name="ActionButton" Style="{StaticResource MainButtonStyle}" Command="{Binding MyCmd}" IsEnabled="{Binding ActionButtonEnabled}"/>