2011-03-10 16 views
2

這兩個按鈕;一個被啓用並且該樣式的一個被禁用。任何人都可以找出原因嗎?頑皮鈕釦風格行爲不端

<Button Command="{Binding ResolveHostsCommand}" VerticalAlignment="Center" IsEnabled="{Binding CanUserUpdateHosts}" Grid.Column="0" Content="Resolve" /> 

<Button VerticalAlignment="Center" IsEnabled="False" Content="Cancel" Grid.Column="1"> 
    <Button.Style> 
     <Style TargetType="Button"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding CanUserUpdateHosts}" Value="True"> 
        <Setter Property="IsEnabled" Value="True"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

回答

3

即使您設置CanUserUpdateHosts爲true,Style.Setter不能覆蓋你的按鈕聲明提供明確的價值。請參閱Dependency Property Value Precedence頁面。觸發器中的樣式設置器在#6,而顯式值是#3。

你需要扭轉你的邏輯,就像這樣:

<Button Command="{Binding ResolveHostsCommand}" VerticalAlignment="Center" IsEnabled="{Binding CanUserUpdateHosts}" Grid.Column="0" Content="Resolve" /> 
<Button VerticalAlignment="Center" Content="Cancel" Grid.Column="1"> 
    <Button.Style> 
     <Style TargetType="Button"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding CanUserUpdateHosts}" Value="False"> 
        <Setter Property="IsEnabled" Value="False"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

或者你可以使用你的風格的一個二傳手的的IsEnabled設置爲false,像這樣:

<Button Command="{Binding ResolveHostsCommand}" VerticalAlignment="Center" IsEnabled="{Binding CanUserUpdateHosts}" Grid.Column="0" Content="Resolve" /> 
<Button VerticalAlignment="Center" Content="Cancel" Grid.Column="1"> 
    <Button.Style> 
     <Style TargetType="Button"> 
      <Setter Property="IsEnabled" Value="False"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding CanUserUpdateHosts}" Value="True"> 
        <Setter Property="IsEnabled" Value="True"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 
+1

反轉邏輯不是必需的,你可以把'IsEnable =「False」'變成一個樣式的Setter,然後如果它觸發,它將被Trigger覆蓋。 – 2011-03-10 20:56:43

+0

@ H.B。好點,我更新了我的答案以反映這一點。我一般會盡量避免「雙重設置」,但是你是對的,它不需要被顛倒過來。 – CodeNaked 2011-03-10 21:13:57

2

您有IsEnabled標記爲false。

<Button VerticalAlignment="Center" IsEnabled="False"...> 
+0

權,但我在樣式中將其設置爲True。如果最高的一個是真的,那麼最低的一個是真的。這顯然不尊重DataTrigger。 – Bluebaron 2011-03-10 20:05:28

+3

你已明確地設置它;它會覆蓋繼承的風格。 – 2011-03-10 20:08:08