0

以下のデータトリガーが機能していません。理由はありますか?
2 つの状況での LineCount がそれぞれ 1 であるコード ビハインドをチェックインしました。
しかし、Value を "-1" に変更すると、トリガーが機能します。
では、なぜ LineCount は常に -1 なのですか?

<TextBox x:Name="TextInfo" TextWrapping="Wrap" Text="Information" HorizontalAlignment="Stretch" Foreground="OrangeRed">
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding LineCount, ElementName=TextInfo}" Value="4">
                    <Setter Property="Background" Value="Green" />
                </DataTrigger>
                <DataTrigger Binding="{Binding LineCount, ElementName=TextInfo}" Value="1">
                    <Setter Property="Background" Value="PowderBlue" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
4

4 に答える 4

2

MSDNのTextBox.LineCountプロパティページを見るとDependencyProperty . さらに、このTextBoxクラスはインターフェイスを実装していないため、このプロパティの値が更新されることはなく、コードでのみ使用できるとINotifyPropertyChangedしか思えません。Binding

このプロパティを使用していることを確認できる唯一の方法は、 を作成しAttached Propertyてアクセスし、更新された値を公開することです。

于 2013-11-01T13:50:11.407 に答える
1

TextBoxコードを簡単に逆コンパイルするとLineCountDependencyProperty. したがって、値が更新されても、トリガーは更新されません。

これは、C#LineCountのクラスのプロパティです。ここで、プロパティの裏付けSystem.Windows.Controls.TextBoxがないことがわかります。DependencyProperty

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int LineCount
{
  get
  {
    if (this.RenderScope == null)
      return -1;
    else
      return this.GetLineIndexFromCharacterIndex(this.TextContainer.SymbolCount) + 1;
  }
}

のテキストが変更されたときに監視し、現在の行の位置を示す添付プロパティを作成するための適切なソリューションとして、この質問に対する答え。TextBoxバインドを変更して、添付プロパティをリッスンすることができます。

于 2013-11-01T13:52:09.610 に答える
0

あなたは必要ありませんElementName、使用してRelativeSourceください:

<DataTrigger Binding="{Binding LineCount, RelativeSource={RelativeSource Self}}" Value="4">
于 2013-11-01T13:24:47.830 に答える
0

TextBoxのLineCountプロパティを使用して、 TextBox内の現在のテキスト行数を取得できますテキストが複数の行に折り返される場合、このプロパティは、ユーザーに表示される折り返された行の表示数を反映します。

<TextBox x:Name="TextInfo" Text="Information" HorizontalAlignment="Stretch" Foreground="OrangeRed" **TextWrapping="Wrap"**>
    <TextBox.Style>
     ....
    </TextBox.Style>
</TextBox>
于 2013-11-01T13:29:15.740 に答える