Привязка контроля родного брата и использование его в конвертере - PullRequest
0 голосов
/ 07 июня 2018

Допустим, у меня есть рабочий код.

  <StackPanel>
    <TextBox x:Name="txt" Text="{Binding MyText}"/>
    <TextBlock Text="Some text" Visibility="{Binding Text, ElementName=txt, Converter={StaticResource BooleanToVisibilityConverter}}"/>
  </StackPanel>

Он связывает свойство TextBox.Но теперь я хочу связать сам элемент управления TextBox, а не само свойство, а затем использовать его в конвертере.Причина в том, что я хочу получить свойство LineCount TextBox в конвертере.

Можем ли мы?

ОБНОВЛЕНИЕ

На самом деле TextBoxвнутри GridViewColumn.

<telerik:GridViewColumn>
    <telerik.GridViewColumn.CellTemplate>
          <DataTemplate>
              <TextBox....

1 Ответ

0 голосов
/ 07 июня 2018

Свойство 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}}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...