2014-11-05 11 views
9

Ne zaman Style.Triggers seçmeli ve ne zaman ControlTemplate.Triggers seçmeliyim? Birini diğeriyle kullanmanın faydaları var mı?Style.Triggers vs ControlTemplate.Triggers

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <ControlTemplate.Triggers> 
        ... 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     ... 
    </Setter> 
    <Style.Triggers> 
     ... 
    </Style.Triggers> 
</Style> 

cevap

10

Güncelleme pencereler 8 Düğme ControlTemplate gerekebilir durumlar vardır böylece IsMouseOver için ControlTemplate.Trigger kullanmak yapar Background does not change of button C# WPF den:

Ben aynı sonucu elde bu stilleri var ki İstenen işlevselliği elde etmek için tamamen üzerine yazılır. Bu, Style tetikleyicileri üzerinde ControlTemplate tetikleyicilerini kullanmanız gereken bir durum olacaktır.

Varsayılan olarak ControlTemplate varsayılanını geçersiz kılmanız gerekmeyebilir. Bir denetiminiz olduğunu varsayalım ve tüm MyTextControl'ün Foreground'un mavi olması ve IsMouseOver'un her zaman doğru olmasını ve herşeyi varsayılan olarak bırakmasını istiyorsunuz. Böyle bir şey kullanabilirsiniz:

<Style TargetType="{x:Type MyTextControl}"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Foreground" Value="Blue"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Kullanmak isteseydiniz ControlTemplate.Triggers varsayılanı MyTextControlTemplate kopyalamak gerekir ya da başka hiçbir görsel ile bitirmek istiyorum. Bunun yanında tek fark, 'un ControlTemplate.Triggers (Precedence documantation) 'dan daha düşük bir önceliğe sahip olduğudur. Ancak bu, her iki tetikleme türünü de kullanırsanız önemlidir.

+0

Benim için, bu varsayılan şablon stili –

+0

@CoolBlue Right'i geçersiz kılmaz, burada kod varsayılan şablonu sağlam bırakacaktır. Eğer sorudan kodunu kullanacak olsaydınız, varsayılanı geçersiz kılardınız. – ShyKnee

+0

Evet, benim amacım, önceliği nedeniyle, Windows 8'den bu yana yapılan değişikliklerle birlikte, yukarıdaki kod artık çalışmıyor ve bu, şablonun stili tarafından geçersiz kılmıyor. Bu günlerde en iyi bahis, kontrolde sağ tıklamak ve varsayılan stilin bir kopyasını düzenlemek için seçenekleri takip etmektir. VS2013 bunu kutudan çıkarır. –

İlgili konular