0

プロパティが変更さRoutedEventれるたびにアニメーションをトリガーするために、カスタムを作成しようとしています。私のクラスはクラスから継承し、プロパティをシャドウします。プロパティを他の値に変更するためにa を使用しています。私のコードはエラーを生成しませんが、何もしません。問題はイベントにあると確信しています。なぜなら、それをイベントと交換すると、すべてが正常に機能するからです。TextTextBlockTextBlockTextButtonTextTextChangedMouseEnter

Public Class MyCustomTextBlock
Inherits TextBlock

Public Shared ReadOnly TextChangedEvent As RoutedEvent = EventManager.RegisterRoutedEvent("TextChanged", _
               RoutingStrategy.Bubble, GetType(RoutedEventArgs), GetType(MyCustomTextBlock))

Public Custom Event TextChanged As RoutedEventHandler
    AddHandler(ByVal value As RoutedEventHandler)
        Me.AddHandler(TextChangedEvent, value)
    End AddHandler

    RemoveHandler(ByVal value As RoutedEventHandler)
        Me.RemoveHandler(TextChangedEvent, value)
    End RemoveHandler

    RaiseEvent(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
        Me.RaiseEvent(e)
    End RaiseEvent
End Event

Public Shared Shadows TextProperty As DependencyProperty =
    DependencyProperty.Register("Text", GetType(String), GetType(MyCustomTextBlock),
                                 New FrameworkPropertyMetadata(String.Empty,
                                    New PropertyChangedCallback(AddressOf TextPropertyChanged)))

Private Shared Sub TextPropertyChanged(ByVal sender As Object, ByVal e As DependencyPropertyChangedEventArgs)
    DirectCast(sender, MyCustomTextBlock).RaiseEvent(New RoutedEventArgs(MyCustomTextBlock.TextChangedEvent))
End Sub
End Class

XAML

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"   
    Title="MainWindow" Height="350" Width="525">

<Window.Resources>
    <Style TargetType="local:MyCustomTextBlock">
        <Style.Triggers>
            <EventTrigger RoutedEvent="local:MyCustomTextBlock.TextChanged">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="FontSize" To="30" Duration="0:0:1" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Style.Triggers>
    </Style>       
</Window.Resources>

<Grid>
    <local:MyCustomTextBlock x:Name="Textblock1" Text="xxxxxxxxx" Background="Yellow" Width="100" Height="25" />
    <Button Content="Change Text" Height="23" HorizontalAlignment="Left" Margin="217,218,0,0" Name="Button1" VerticalAlignment="Top" Width="75" />
</Grid>

Class Main Window       
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As      
System.Windows.RoutedEventArgs) Handles Button1.Click

    Textblock1.Text = "apollon"
End Sub
End Class
4

1 に答える 1

0

問題は、ベースのメンバーと競合する新しいメンバーを作成していることにあるようですTextBoxTextChangedに既に存在するイベントを使用することを検討するTextBoxか、独自のイベントが必要な場合は別の名前を付けてください。これまでのところ、基本プロパティが既に行っていないことは何もしていません。

ただし、特定の質問の主な問題は、TextProperty作成した新しいものにあるようです。基本クラスの依存関係プロパティを非表示にしないでください。これは主に、すべての状況でどの依存関係プロパティを使用するかを制御できないためですが、それを不要にするメカニズムが組み込まれているためでもあります。あなたの場合、DP の定型コードを完全に実装していないため、問題が悪化しています。ラッパー プロパティがないため、コードからの Text プロパティの設定は settingTextBox.Textであり、内部的に で呼び出しSetValueているTextBox.TextPropertyため、コードを完全にスキップします。

独自のメタデータを宣言する代わりにTextProperty、メタデータを既存のメタデータに追加することができます。変更ハンドラーを既存のプロパティに追加するには、次の呼び出しを静的コンストラクターに追加します。

        TextProperty.OverrideMetadata(GetType(MyCustomTextBlock),
                             New FrameworkPropertyMetadata(String.Empty,
                             New PropertyChangedCallback(AddressOf TextPropertyChanged)))
于 2013-05-09T15:31:19.100 に答える