2010-01-28 21 views

Odpowiedz

5

Nie jest odpowiednikiem tego konkretnego zastosowania w Silverlight. Silverlight obsługuje tylko klucze strunowe w celu uzyskania dostępu do zasobów. Dlatego użycie klawisza {x:Type SomeType} jako klucza nie działa.

W Silverlight należy wykonać pełną kopię stylu sterowania. Możesz to zrobić, używając Blend, który ma narzędzia do robienia tego lub kopiowania i wypakowywania go z dokumentacji Silverlight. Control Styles and Templates

Oczywiście po skopiowaniu początkowego stylu można następnie zmodyfikować kopię lub utworzyć inne style przypisujące tę kopię do BasedOn w celu utworzenia zestawu odmian.

+0

Witaj Anthony, Obawiałem się, że ktoś to powie, nie mam wtedy nic do zrobienia, wtedy :( – Calin

0

powinien powinien być (i according to Jesse Liberty)
BasedOn="{StaticResource TextBlock}"

+0

Hi Muad'Dib, Otrzymuję komunikat "Nie mogę znaleźć zasobu z nazwą/kluczem TextBlock" Czarownica faktycznie nie jest prawdziwa, ponieważ wyraźnie używam TwilightBlueTheme z zestaw narzędzi silverlight. – Calin

3

myślę, że będzie pracować, aby przejść się trochę do tyłu, można zrobić swój styl bazowy

<Style TargetType="Button" x:Key="MyButtonStyle"> 
    <Setter Property="PropertyName" Value="PropertyValue" /> 
</Style> 

wtedy można oprzeć wszystkie przyciski w tym stylu

<Style TargetType="Button" BasedOn="{StaticResource MyButtonStyle}" /> 

Następnie, jeśli trzeba dodać do tego stylu można po prostu oprzeć go na nazwie stylu

<Style TargetType="Button" BasedOn="{StaticResource MyButtonStyle}"> 
    <Setter Property="PropertyName" Value="PropertyValue" /> 
</Style> 

lub

<Style TargetType="Button" BasedOn="{StaticResource MyButtonStyle}" x:Key="MyOtherButtonStyle"> 
    <Setter Property="PropertyName" Value="PropertyValue" /> 
</Style> 
0

Rzeczywiście można to zrobić teraz w Silverlight 5.

Najpierw zadeklarować swój styl

<Style x:Key="TextBoxStyle" TargetType="TextBox" BasedOn="{local:Type TypeName=TextBox}"> 

</Style> 

Następnie trzeba stworzyć MarkupExtension który działa zarówno w WPF i Silverlight 5 do zastąpienia x: Type

/// A MarkupExtension which introduces x:Type like syntax to both WPF and Silverlight (Cross-platform). This is used internally 
/// for the themes, but is also useful e.g. when creating custom Control Templates for SciChart 
/// </summary> 
/// <remarks> 
/// Licensed under the CodeProject Open License 
/// http://www.codeproject.com/Articles/305932/Static-and-Type-markup-extensions-for-Silverlight 
/// </remarks> 
/// 
public class TypeExtension : MarkupExtension 
{ 
    /// <summary> 
    /// Initializes a new instance of the <see cref="TypeExtension" /> class. 
    /// </summary> 
    public TypeExtension() 
    { 
    } 

    /// <summary> 
    /// Initializes a new instance of the <see cref="TypeExtension" /> class. 
    /// </summary> 
    /// <param name="type">The type to wrap</param> 
    public TypeExtension(Type type) 
    { 
     Type = type; 
    } 

    /// <summary> 
    /// Gets or sets the type information for this extension. 
    /// </summary> 
    public System.Type Type { get; set; } 

    /// <summary> 
    /// Gets or sets the type name represented by this markup extension. 
    /// </summary> 
    public String TypeName { get; set; } 

    public override Object ProvideValue(IServiceProvider serviceProvider) 
    { 
     if (Type == null) 
     { 
      if (String.IsNullOrWhiteSpace(TypeName)) throw new InvalidOperationException("No TypeName or Type specified."); 
      if (serviceProvider == null) return DependencyProperty.UnsetValue; 

      IXamlTypeResolver resolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver; 
      if (resolver == null) return DependencyProperty.UnsetValue; 

      Type = resolver.Resolve(TypeName); 
     } 
     return Type; 
    } 
} 

Testowany jak działa w WPF i Silverlight