2012-04-03 8 views
1

Ich habe folgende Eigenschaftsdefinition:angebracht Eigenschaft innerhalb der Steuerstildefinition

public static class Extensions 
{ 
    public static readonly DependencyProperty TestProperty = DependencyProperty.RegisterAttached("Test", typeof(Storyboard), typeof(UIElement), new UIPropertyMetadata(null)); 

    public static void SetTest(UIElement element, Storyboard value) 
    { 
     element.SetValue(TestProperty, value); 
    } 

    public static Storyboard GetTest(UIElement element) 
    { 
     return (Storyboard)element.GetValue(TestProperty); 
    } 
} 

Und versuchen Sie es

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:Application;assembly=Application" 
    x:Name="template" 
    Height="40" Width="1460"> 
    <Grid Background="#FF000000"> 
     <TextBlock Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Left" TextAlignment="Left" FontSize="32">Example</TextBlock> 
    </Grid> 
    <UserControl.Style> 
     <Style> 
      <Setter Property="local:Extensions.Test"> 
       <Setter.Value> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="template" From="270" To="360" Duration="0:0:1" Storyboard.TargetProperty="Angle" /> 
        </Storyboard> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </UserControl.Style> 
</UserControl> 

im XAML verwenden, wenn ich versuche, so XAML zu laden (zum Beispiel unter Verwendung von XamlReader.Load(stream);) , bekomme ich die Ausnahme mit der folgenden Nachricht

'local: Extensions.Test' Eigenschaft ist keine gültige DependencyPrope auf dem Typ 'Application.Extensions'. Stellen Sie sicher, dass für die Eigenschaft DependencyProperty mit einem Mitgliedsfeld definiert ist, das mit dem Suffix "Property" endet. Fehler beim Objekt 'System.Windows.Setter'.

Kann mir jemand bei diesem Problem helfen?

danke im voraus!

Antwort

3

Der Eigentümer Typ Extensions statt UIElement sein sollte:

public static readonly DependencyProperty TestProperty = 
    DependencyProperty.RegisterAttached(
     "Test", 
     typeof(Storyboard), 
     typeof(Extensions), // here 
     new UIPropertyMetadata(null)); 

Könnte auch ohne Metadaten geschrieben werden:

public static readonly DependencyProperty TestProperty = 
    DependencyProperty.RegisterAttached(
     "Test", 
     typeof(Storyboard), 
     typeof(Extensions)); 
+0

Nein, er dies ein DependencyProperty von Instanzen der sein nicht will Klasse "Extensions", möchte er, dass dies eine Attached-Eigenschaft für Instanzen der vorhandenen Klasse "UIElement" ist, von der "UserControl" erbt. – Alain

+0

@Alain du irrst dich. Der Besitzertyp muss der Typ sein, der die Eigenschaft deklariert. Sie können keinen anderen Typ als Eigentümer der angefügten Eigenschaft deklarieren. Lesen Sie [hier] (http://msdn.microsoft.com/en-us/library/ms597495.aspx) und versuchen Sie es, bevor Sie eine Downvote machen. – Clemens

+0

Wenn das wahr ist, ist die Lösung natürlich nicht, den Besitzer "Erweiterungen" zu machen, oder er wäre nicht in der Lage, die Eigenschaft auf UIElements anzuwenden, was eindeutig seine Absicht ist. Es sollte jedoch auch nicht notwendig sein, dass er einen neuen Typ erstellt, der von UIElement erbt. – Alain

Verwandte Themen