2016-10-27 60 views
1

使用DynamicResource風格和DataTrigger的按鍵我使用預定義的樣式像Style="{DynamicResource SquareButtonStyle}"在XAML

不能被修改,我需要啓用/禁用Button

這似乎是不可能做到的?

錯誤是:屬性'樣式'被設置不止一次。

<Button Content="Guardar" Width="100" Style="{DynamicResource SquareButtonStyle}" Name="SaveTemplateATM" Click="SaveTemplateATM_Click"> 
    <Button.Style> 
     <Style TargetType="{x:Type Button}"> 
       <Style.Triggers> 
         <DataTrigger Binding="{Binding Text.Length, ElementName=UserName, UpdateSourceTrigger=PropertyChanged}" Value="0"> 
          <Setter Property="IsEnabled" Value="False"/> 
         </DataTrigger>           
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

回答

2

只能設置style屬性(或屬性)一次,但你可以將其設置爲一個新的風格,是基於資源風格。這意味着它會繼承資源風格的所有內容,另外它還會有你自己添加的內容。

<Button Content="Guardar" Width="100" Name="SaveTemplateATM" Click="SaveTemplateATM_Click"> 
    <Button.Style> 
     <Style 
      TargetType="{x:Type Button}" 
      BasedOn="{StaticResource SquareButtonStyle}" 
      > 
      <Style.Triggers> 
       <DataTrigger 
        Binding="{Binding Text.Length, ElementName=UserName}" 
        Value="0" 
        > 
        <Setter 
         Property="IsEnabled" 
         Value="False" 
         /> 
       </DataTrigger>           
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

此外,UpdateSourceTrigger=PropertyChanged充其量是無害這裏,但你不希望它是具有約束力。什麼是標誌確實是告訴Binding如何更新屬性的結合(這是UserName.Text.Length在這種情況下),當目標性質的變化(這是在這種情況下Button.IsEnabled)。這在這裏沒有意義:即使UserName.Text.Length不是隻讀的,那麼Binding將永遠不會更新它,你不會希望它。

UpdateSourceTrigger標誌修改雙向綁定的默認行爲,例如,如果你是一個TextBoxText屬性綁定到一個視圖模型字符串屬性,默認行爲是當TextBox失去更新視圖模型屬性焦點。您可能希望在用戶每次輸入字符時更新它 - 在這種情況下,您會提供BindingUpdateSourceTrigger=PropertyChanged

+0

謝謝!當我使用你的代碼時,我得到了'附加信息:''DynamicResourceExtension'不能在類型'Style'的'BasedOn'屬性上設置。 'DynamicResourceExtension'只能在DependencyObject的DependencyProperty上設置。' –

+0

@Dimi嗯。不好。它會讓你使用'StaticResource'而不是'DynamicResource'嗎? –

+0

是的。謝謝! –