2011-05-05 99 views
2

我想用自定义样式创建MyScrollViewer控件。 我创建了一个UserControlScrollViewer(我们能不能创造一个CustomControl因为ScrollViewerSystem.Windows.Controls是一个密封类),并在UserControl的资源我已经添加了ScrollViewer(自定义样式)的风格。在Silverlight中创建ScrollViewer UserControl时出现问题

在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。假设我在ScrollViewer内有TextBox,我无法获得该控件。例如: -

<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> 

我不能够在运行时设置文本,因为我越来越txtLevelnull

+0

您需要创建一个usercontrol而不是为默认的scrollviewer创建样式的原因是什么? – 2011-05-05 11:09:15

+0

@Xin我们已经创建了一个控制库,我想在其中添加make conrol,以便每个人都可以使用该控件。 – sag 2011-05-05 11:27:17

+0

你也可以分享你的风格吧?我也不认为一个usercontrol可以风格。 – 2011-05-05 11:46:06

回答

0

在自定义控件类中添加以下代码,您将能够从样式中找到TextBlock。

public override void OnApplyTemplate() { 
     base.OnApplyTemplate(); 
     this.textBlock = this.GetTemplateChild("YourTextBlockName") as TextBlock; }