2011-01-12 21 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. 
    } 

特價案例:

相關問題