Özel kontroller oluşturmak için MS'in kontrol şablonlarını temel olarak kullanmaya başladığımdan beri bunu merak ettim. Neden bir Şablonu xaml, WPF?
örneğin Etiket örneği inceleyelim: http://msdn.microsoft.com/en-us/library/ms752327.aspxneden yeryüzünde böyle tanımlanır:
<Style x:Key="{x:Type Label}" TargetType="Label">
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="VerticalContentAlignment" Value="Top" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Border>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="True" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{DynamicResource DisabledForegroundColor}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
ve doğrudan bu gibi değil: Bir olarak adlandırılan sonra
<ControlTemplate x:Key="{x:Type Label}" TargetType="Label">
<Border>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="True" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{DynamicResource DisabledForegroundColor}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
ve Şablon stili ile doğrudan ve değil mi?
Böyle şeyler yapmak için göremediğim gizli bir neden var mı? ya da şeyleri yapmanın sadece bir yolu bu mu?
(Not: hepimiz bu değerleri tutarsanız o bir etiket için varsayılan değerler vardır ve bu temelde yararsız olduğunu biliyorum bu çünkü yatay ve dikey hizalama belirleyiciler olduğunu söyleme)
oy, şablonlar ve stiller için de aynı şekilde çalıştı. Bunu sadece kendi gözlerimle görmek için deneyeceğim (bu 2 oyuncunun farklı olduğuna inanamıyorum ...) cevabın ikinci kısmı için, katılmıyorum (konuyla ilgili diğer sorumu gördünüz) . Hala aldığım davranış için geçerli bir açıklama bulamadı, ama x: anahtarını kaldırmak her zaman olduğu gibi çalışmıyor (en azından benim için ...) – David
Bir denetimin stili tanımlanır, görsel ağacı, x ile bir stil tanımı bulana kadar çaprazlayacaktır: Anahtar kendi türüne eşittir ve sonra bu stili kendisine uygulayacaktır. Aynı mantık, Şablonlar (veya bu konuyla ilgili başka bir kaynak) için uygulanmadığı için, gerçekten bu kadar garip değil;) –
Tamam, onu kendi gözlerimle gördüm. Bunu sormadan önce denemeliydi. Hatta bundan daha da kötüsü: Bir ControlTemplate'e bir Stili yayınlamanın imkânsız olduğunu söyleyerek derlendikten sonra bir hata alırsınız. Bu, yazdıklarınızla mantıklı. Bunun Şablonlar ve Stiller için de çalışacağını düşünürdüm ... (neden olmasın?) – David