0

選択されているかどうかを示すブールフラグが付いたカスタムボタンを作成しました。選択されている場合は、ボタンの背景色を変更して、ユーザーがどのコントロールを見ているかをすばやく確認できるようにします。問題は、トリガーを正しく機能させることができないことです。ここで見たものはすべて試しましたが、コードのInitializeComponentセクションでエラーが発生します。

これが私が扱っているプロパティです

Private mIsSelected As Boolean = False
Public Property IsSelected() As Boolean
    Get
        Return mIsSelected
    End Get
    Set(ByVal value As Boolean)
        mIsSelected = value
    End Set
End Property


Public Shared ReadOnly MyBackgroundProperty As DependencyProperty = DependencyProperty.Register("MyBackground",
                                                                                                GetType(LinearGradientBrush), GetType(RentAdjButtons),
                                                                                                    New PropertyMetadata(New LinearGradientBrush(ColorConverter.ConvertFromString("#3366CC"), ColorConverter.ConvertFromString("#0000FF"), New System.Windows.Point(0.5, 0), New System.Windows.Point(0.5, 1))))


Private mMyBackground As New LinearGradientBrush
Public Property MyBackground() As LinearGradientBrush
    Get
        Return mMyBackground
    End Get
    Set(ByVal value As LinearGradientBrush)
        mMyBackground = value
    End Set
End Property

これが私のXMALです

 <Style TargetType="Com:RentAdjButtons">
            <Setter Property="MyBackground" Value="{StaticResource DefaultBackground}" />
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="MyBackground" Value="{StaticResource SelectedButton}" />
                </Trigger>
            </Style.Triggers>
       </Style>

現在、私が取得しているエラーは、「トリガーでプロパティをnullにすることはできません」です。

よろしくお願いします

4

2 に答える 2

1

デフォルトでこのプロパティを持つToggleButtonを使用できます。

于 2012-12-18T21:10:09.290 に答える
0

トリガーが機能するには、がであるTrigger.Property必要があります。ドキュメントについては、MSDNDependencyPropertyを参照してください。クラスプロパティをに変更する必要があります。IsSelectedDependencyProperty

また、MyBackgroundのゲッター/セッターは、MSDNで文書化されているようにおよびを使用して定義する必要がSetValueありGetValueます。

    Public Property State() As Boolean
      Get
          Return CType(Me.GetValue(StateProperty), Boolean)
      End Get
      Set(ByVal value As Boolean)
          Me.SetValue(StateProperty, value)
      End Set
    End Property
    Public Shared ReadOnly StateProperty As DependencyProperty = 
      DependencyProperty.Register("State", GetType(Boolean), GetType(MyStateControl),
      New PropertyMetadata(False))
于 2012-12-18T23:07:24.950 に答える