在我的应用中,我多次设置名为Text
的{{1}}的{{1}}。
如何使TextBlock
只是增长自动以适应文本,但在文本更改时不缩小?
tbkStatus
每隔几秒就会发生变化,有长文本和短文本的状态。
我希望我的TextBlock能够适应最长文本的大小,即使有短文本,TextBlock也不应缩小
TextBlock
答案 0 :(得分:2)
仅 Xaml 的解决方案:
<TextBlock Text="{Binding StatusText}"
MinWidth="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth}"
HorizontalAlignment="Left"/>
这样,每当 Width
增长时,MinWidth
也会增长。因此,控件不能缩回。
答案 1 :(得分:0)
我想您可以只听取SizeChanged
或LayoutUpdated
等布局事件或写一些行为
在下面的示例中,基本前提是聆听这些事件中的任何一个,并强制您的控件永不缩小
注意这是完全未经测试的,只是一个想法,也许您可以设置
MinWidth
属性
<强>的Xaml 强>
<TextBlock x:Name="tbkStatus" SizeChanged="OnSizeChanged"/>
代码背后
private double _lastSize;
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
var textBlock = sender as TextBlock;
if (textBlock == null)
{
return;
}
if (e.WidthChanged)
{
if (textBlock.Width < _lastSize)
{
textBlock.Width = _lastSize;
}
_lastSize = textBlock.Width;
}
}
同时注意
SizeChangedEventArgs
类有许多属性,您可以利用
答案 2 :(得分:-1)
您可以这样做:
abc
/ | \
Level 1 a(bc) b(ac) c(ba) (Here three new call to permute are made out of permute with l=1)
Goes on...
由于 <TextBlock Name="tbkStatus" Grid.Row="2" Margin="6" TextWrapping="Wrap" Text="{Binding StatusText}"/>
没有TextBlock
事件,这将完成这项工作
TextChange
或者,您可以使用DependencyPropertyDescriptor dp = DependencyPropertyDescriptor.FromProperty(TextBlock.TextProperty, typeof(TextBlock));
int textLength =0
dp.AddValueChanged(tbkStatus, (object a, EventArgs b) =>
{
if (textLength < tbkStatus.Text.Length)
{
textLength = tkbStatus.Text.Length;
tbkStatus.Width = textLength * SomeValue; //You have to play around and see what value suits you best since it depends on font and it's size
}
});
并将其设为只读并使用TextBox
事件。