5

境界線を持つ UserControl があります。境界線の色は依存関係プロパティで設定する必要があります。また、境界線の不透明度をアニメーション化したいと考えています。現在の xaml コードは次のようになります。

<Border BorderBrush="{Binding ElementName=ImageViewerUserControl, 
    Path=NotificationColor}"  BorderThickness="3" x:Name="AnimatedBorderBrush" 
    Visibility="{Binding ElementName=ImageViewerUserControl, 
    Path=ShowSequenceErrorNotification, Converter={StaticResource boolToVisibility}}"> 
    <Border.Triggers>
        <EventTrigger RoutedEvent="Border.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush"
                        Storyboard.TargetProperty="BorderBrush.Opacity"
                        RepeatBehavior="Forever"
                        AutoReverse="True"
                        From="1"
                        To="0.0"
                        Duration="0:0:1"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Border.Triggers>
</Border>

これはエラーのみを与えます:

プロパティ パス 'BorderBrush.Opacity' 内のすべてのプロパティ参照を解決できません。該当するオブジェクトがプロパティをサポートしていることを確認してください。

しかし、BorderBrush の色を変更すると、うまくいくと言えますBlack。これはどのように達成できますか?依存関係プロパティを使用して境界線のブラシの色を設定したいと考えています。はい、依存関係プロパティはBrush

4

2 に答える 2

2

あなたの名前は ではなくに関連してAnimatedBorderBrushいるため、誤解を招きます。をアニメーション化する場合は、 の代わりに を使用します。BorderBorderBrushBorder.OpacityBorder.OpacityDoubleAnimationBorderBrush.Opacity

<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush"
    Storyboard.TargetProperty="Border.Opacity"
    RepeatBehavior="Forever"
    AutoReverse="True"
    From="1"
    To="0.0"
    Duration="0:0:1" />

更新 >>>

ああ、悪いことです...アニメーションは 内で定義されているためBorder、参照する必要はありません。使用するだけOpacityです:

<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush"
    Storyboard.TargetProperty="Opacity"
    RepeatBehavior="Forever"
    AutoReverse="True"
    From="1"
    To="0.0"
    Duration="0:0:1" />
于 2013-10-08T12:20:56.400 に答える
2

ここでの問題は、アニメーション化するオブジェクト (ブラシ) がある場合にのみアニメーションが機能することだと思います。DependencyPropertyデフォルト値なしで登録すると、デフォルトで null になります。デフォルト値でDPを登録してみてください

public static readonly DependencyProperty NotificationColorProperty = DependencyProperty.Register(
    "NotificationColor",
    typeof(Brush),
    typeof(ImageViewerUserControl),
    new PropertyMetadata(Brushes.Transparent)
);

編集:

そして、@Sheridanが言うようStoryboard.TargetProperty="Opacity"に、の代わりに使用してくださいBorder.Opacity。ダイレクトを指定するBorderBrushと機能しますが、制限付き DP では機能しません。

于 2013-10-08T12:31:22.080 に答える