我想用自定义样式创建一个MyScrollViewer
控件。
我为UserControl
创建了ScrollViewer
(我们无法创建CustomControl
,因为ScrollViewer
来自System.Windows.Controls
是一个密封的类),而UserControl
} s资源我为ScrollViewer
添加了一种样式(自定义样式)。
在Codebehind中,我创建了一个属性Content
,它覆盖基类的Content
(即UserControl
)。
代码隐藏:
public partial class ScrollViewer : UserControl
{
private System.Windows.Controls.ScrollViewer _scrollViewer;
public ScrollViewer()
{
InitializeComponent();
// DataContext = this;
_scrollViewer = new System.Windows.Controls.ScrollViewer();
}
public new object Content
{
get { return _scrollViewer; }
set
{
_scrollViewer.Content = value;
base.Content = _scrollViewer;
}
}
}
但是这段代码的问题是我无法在运行时Control
内获取ScrollViewer
。假设我TextBox
内ScrollViewer
,我无法控制。 E.g:
<ScrollViewer x:Name="scrDetail" >
<StackPanel Margin="6" Grid.Column="1" Grid.Row="0">
<Label Name="lblLevel" Content="Level" Margin="2" />
<TextBox HorizontalAlignment="Stretch" Margin="2" Name="txtLevel" IsEnabled="False" Text="System" />
</StackPanel>
</ScrollViewer>
我无法在运行时设置文本,因为我的txtLevel
为null
。
答案 0 :(得分:0)
在自定义控件类中添加以下代码,您将能够从样式中找到TextBlock。
public override void OnApplyTemplate() {
base.OnApplyTemplate();
this.textBlock = this.GetTemplateChild("YourTextBlockName") as TextBlock; }