2011-01-12 36 views
0

我的标签控件具有这样的资源: 如何在运行时将wpf控件添加到模板化选项卡控件?

     </Border> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter TargetName="Border" Property="Background" Value="White" /> 
          <Setter TargetName="Image" Property="Visibility" Value="Visible" /> 
          <Setter TargetName="Border" Property="BorderBrush" Value="Gray" /> 
          <Setter TargetName="TextBlock" Property="Foreground" Value="Black" /> 
          <Setter TargetName="Border" Property="Margin" Value="-2,0,2,-1" /> 
         </Trigger> 
         <Trigger Property="IsMouseOver" Value="True" SourceName="Border" > 
          <Setter TargetName="Border" Property="Background" Value="White" /> 
          <Setter TargetName="Border" Property="BorderBrush" Value="DarkGray" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="ContentTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <Grid Background="WhiteSmoke" Name="Grid1"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="5"/> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 
        <Canvas Background="{StaticResource {x:Static SystemColors.ActiveCaptionBrushKey}}" /> 

       </Grid> 
       </DataTemplate> 

      </Setter.Value> 
     </Setter> 
    </Style> 

我怎样才能添加控件,如 “标签” 网格(在资源与我的TabControl的名称“Grid1”)?

回答

1

尝试搜索VisualTree中的网格,然后将其添加到您的控件中。您可以使用以下帮助功能查找网格,然后检查名称。否则,您还可以扩展代码以实现更轻松的搜索(通过添加名称参数)。

void FindChildFrameworkElementsOfType<T>(DependencyObject parent,IList<T> list) where T: FrameworkElement{    
    DependencyObject child; 
    for(int i=0;i< VisualTreeHelper.GetChildrenCount(parent);i++){    
     child = VisualTreeHelper.GetChild(parent, i); 
     if (child is T) { 
      list.Add((T)child); 
     } 
     FindChildFrameworkElementsOfType<T>(child,list); 
    } 
} 

喜欢的东西:

List<Grid> list=new List<Grid>(); 
FindCHildFrameworkElementsOfType<Grid>(this,list) 
foreach(Grid grid in list){ 
    if(grid.Name=="Grid1"){ 
     // Add here your control 
     break; 
    } 
} 
0

您可以添加Loaded事件处理程序:

<Grid Background="WhiteSmoke" Name="Grid1" Loaded="Grid1_Loaded"> 

和填充和/或记录处理程序的参考网格:

private Grid grid1; 
    private void grid1_Loaded(object sender, RoutedEventArgs e) 
    { 
     grid1 = sender as Grid; 
     // add label, etc. 
    } 

特价案例:

相关问题