WPF绑定到TextBox MinLines MaxLines

时间:2015-12-28 09:40:06

标签: wpf binding .net-4.0

我有一个带有模板标题的wpf Expander。在此模板中,我有TextBoxBinding使用Converter设置MaxLinesMinLines,这取决于Expander.IsExpanded。< / p>

我们的想法是让用户看到第一行文本,并在扩展Expander时显示更多内容(替代解决方案是在展开时使TextBox.Visiblitity = Collapsed和另一个TextBox.Visibility = Visible,但用户将丢失其光标位置,标记文字,我不知道还有什么)

<UserControl>
  <UserControl.Resources>
    <DataTemplate x:Key="MyTemplate">
      <Grid>
        <Grid.Resources>
          <Converters:ExpandedToLineRowsConverter ExpandedLines="5"
                                                  CollapsedLines="1"
                                                  x:Key="ExpandedToLines"/>
        </Grid.Resources>
        <TextBox MaxLines="{Binding IsExpanded,
                            Converter={StaticResource ExpandedToLines},
                            RelativeSource={RelativeSource FindAncestor,
                                            AncestorLevel=1,
                                            AncestorType={x:Type Expander}},
                            UpdateSourceTrigger=PropertyChanged}"

                 MinLines="{Binding IsExpanded,
                            Converter={StaticResource ExpandedToLines},
                            RelativeSource={RelativeSource FindAncestor,
                                            AncestorLevel=1,
                                            AncestorType={x:Type Expander}},
                            UpdateSourceTrigger=PropertyChanged}" />
      </Grid>
    </DataTemplate>
  </UserControl.Resources>
  <Expander Header="{Binding}"
            HeaderTemplate="{StaticResource MyTemplate}">
      <!-- other wpf controls under expander, they do not affect the problem -->
  </Expander>
</UserControl>

ExpandedToLineRowsConverter非常简单:

public class ExpandedToLineRowsConverter : IValueConverter
{
  public int ExpandedLines { get; set; }
  public int CollapsedLines { get; set; }

  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    return (bool)value ? ExpandedLines : CollapsedLines;
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
    return (int)value != CollapsedLines;
  }
}

问题是,它只在扩展时才有效,而不是在折叠时(文本框即使在Expander.IsExpanded = false时仍保持多线模式)。

当我在转换器中设置断点时,它返回了corect的行数,但看起来像TextBox只是忽略它们。

我不知道该怎么做......

修改: sample VS2012 project with problem

0 个答案:

没有答案
相关问题