我有一个自定义控件,ccTextBlock放在ScrollViewer中。当通过绑定向其发送不同的字符串时,customcontrol将改变大小(垂直)。自定义控件将保留在显示屏上,但会在屏幕上其他位置选择文本时更改。
如何在之后获取自定义控件的实际宽度和高度,并将每个文本字符串发送给它? (使用OnApplyTemplate()不起作用,因为它似乎只在自定义控件的第一次构造时被调用一次。)
感谢您的回复。
<ScrollViewer VerticalScrollBarVisibility="Auto">
<Grid>
<wc:ccTextBlock Text="{Binding Text, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" />
</Grid>
</ScrollViewer>
更新 :也许更好的方法来表达这个问题&#34;如何在ScrollViewer内部获取元素的高度& #34;。以下是ccTextBlock的定义:
public class ccTextBlock : Control
{
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
// Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(ccTextBlock), new UIPropertyMetadata(null));
/// <summary>
/// Constructor
/// </summary>
static ccTextBlock()
{
// Initialize as lookless control
DefaultStyleKeyProperty.OverrideMetadata(typeof(ccTextBlock), new FrameworkPropertyMetadata(typeof(ccTextBlock)));
}
public override void OnApplyTemplate()
{
//Effectively apply the template
base.OnApplyTemplate();
Console.WriteLine(String.Format(" ActualHeight is {0}", this.ActualHeight.ToString()));
var x = this.FontSize;
}
}
Generic.xaml在哪里:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfCustomControlLibrary">
<Style TargetType="{x:Type local:ccTextBlock}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ccTextBlock}">
<!-- Control Layout -->
<TextBlock Text="{TemplateBinding Text}" TextWrapping="Wrap" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:3)
ActualWidth
和ActualHeight
是包含控件的当前width
和height
的属性。
如果您正在寻找通知有关更改的事件,那么它将是FrameworkElement.SizeChanged
事件。您可以在OnApplyTemplate
实施中注册此活动。