2012-04-03 215 views
1

我有以下屬性定義:附加屬性

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); 
    } 
} 

,並嘗試在XAML

<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> 

使用當我嘗試加載這樣XAML(例如,使用XamlReader.Load(stream);) ,我得到以下消息的例外

'local:Extensions.Test'屬性不是有效的DependencyPrope rty類型'Application.Extensions'。驗證該屬性是否具有使用以「Property」後綴結尾的成員字段定義的DependencyProperty。對象'System.Windows.Setter'出錯。

有人可以幫我解決這個問題嗎?

在此先感謝!

回答

3

所有者類型應該是Extensions而不是UIElement

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

也可以不寫的元數據:

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

不,他不希望這是的情況下的一個DependencyProperty類「擴展」,他希望這是用於現有類「UIElement」的實例的附加屬性,UserControl從該類繼承。 – Alain 2012-04-03 17:54:13

+0

@Alain你錯了。所有者類型必須是聲明屬性的類型。您不能聲明其他類型爲您所附屬性的所有者。閱讀[這裏](http://msdn.microsoft.com/en-us/library/ms597495.aspx)並嘗試之前,你downvote。 – Clemens 2012-04-03 18:00:16

+0

如果這是真的解決方案顯然不是使所有者「擴展」,或他不能將該屬性應用於UIElements,這顯然是他的意圖。但是,他也不需要創建一個繼承UIElement的新類型。 – Alain 2012-04-03 18:05:01