我有一个带有模板标题的wpf Expander
。在此模板中,我有TextBox
,Binding
使用Converter
设置MaxLines
和MinLines
,这取决于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只是忽略它们。
我不知道该怎么做......