Как добавить элемент управления wpf в шаблон элемента управления вкладками во время выполнения? - PullRequest
0 голосов
/ 12 января 2011

Элемент управления My Tab имеет такой ресурс:

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

Как добавить элемент управления, такой как «Метка», в Grid (в Resource с именем «Grid1»)мой TabControl?

Ответы [ 2 ]

1 голос
/ 12 января 2011

Попробуйте найти сетку в 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 голосов
/ 12 января 2011

Вы можете добавить обработчик событий 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.
    }

Особый случай:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...