Свойство LineCount
меняет свое значение не только при изменении текста TextBox
, но и при изменении макета TexBox
(например, размеров).Это зависит от свойства TextWrapping
TextBox
.
. Если вы хотите использовать многоразовое и полное решение, я бы предложил вам создать Behavior
для TextBox
, который предоставляет свойство наблюдаемой зависимостиВы можете привязать к.
Вот пример такого поведения:
class LineCountBehavior : Behavior<TextBox>
{
public static readonly DependencyProperty LineCountProperty =
DependencyProperty.Register(
"LineCount",
typeof(int),
typeof(LineCountBehavior),
new PropertyMetadata(0));
public int LineCount
{
get { return (int)GetValue(LineCountProperty); }
set { SetValue(LineCountProperty, value); }
}
protected override void OnAttached()
{
AssociatedObject.LayoutUpdated += LineCountChanged;
AssociatedObject.TextChanged += LineCountChanged;
}
protected override void OnDetaching()
{
AssociatedObject.LayoutUpdated -= LineCountChanged;
AssociatedObject.TextChanged -= LineCountChanged;
}
private void LineCountChanged(object sender, EventArgs e)
{
LineCount = AssociatedObject.LineCount;
}
}
Пример использования:
<TextBox x:Name="TextBox" AcceptsReturn="True" TextWrapping="Wrap">
<i:Interaction.Behaviors>
<l:LineCountBehavior x:Name="LineCountBehavior"/>
</i:Interaction.Behaviors>
</TextBox>
<TextBlock Visibility="{Binding LineCount, ElementName=LineCountBehavior, Converter={StaticResource IntToVisibilityConverter}}"/>