假设我有工作代码。
<StackPanel>
<TextBox x:Name="txt" Text="{Binding MyText}"/>
<TextBlock Text="Some text" Visibility="{Binding Text, ElementName=txt, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</StackPanel>
它绑定TextBox的属性。但是现在我想绑定TextBox控件本身而不是属性本身然后在转换器中使用它。原因是我想在转换器中获取TextBox的LineCount属性。
我们可以吗?
更新
实际上TextBox在GridViewColumn中。
<telerik:GridViewColumn>
<telerik.GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox....
答案 0 :(得分:0)
LineCount
属性不仅会在您更改TextBox
的文本时更改其值,还会在TexBox
的布局更改(例如维度)时更改其值。这取决于TextWrapping
的{{1}}属性。
如果你想要一个可重用且完整的解决方案,我建议你为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;
}
}