2016-03-02 60 views
0

我有一個tabcontrol從一個observablecollection填充。基於observablecollection,tabitems頭文件被設置,tabitem中的數據網格被填充。我想要做的是獲得tabitem標題並將其設置在文本塊中。我能夠獲得tabcontrol名稱並將其設置爲文本塊文本,而不是來自所選tabitem的頁眉。從動態填充tabcontrol獲取TabItem標題

<TabControl Grid.Row="1" ItemsSource="{Binding Workspaces}" Height="Auto" Background="Transparent" x:Name="TabsName" > 
        <TabControl.Resources> 
         <localHelper:HeaderAppendConverter x:Key="HeaderAppedConvrter"/> 
        </TabControl.Resources> 
        <TabControl.ItemTemplate > 
         <DataTemplate > 
          <TextBlock Text="{Binding HeaderText}" /> 
         </DataTemplate> 
        </TabControl.ItemTemplate> 

        <TabControl.ContentTemplate> 
         <DataTemplate x:Name="Tabsitems"> 
          <Grid> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="50"/> 
            <RowDefinition Height="725" /> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="1600" /> 
           </Grid.ColumnDefinitions> 
           <dxg:GridControl Grid.Row="1" x:Name="NameGrid" ItemsSource="{Binding Data}" > 
            <dxgcore:GridControl.Columns> 

             <dxg:GridColumn Name="Month1" FieldName="Month01" Visible="True" AllowEditing="False" HorizontalHeaderContentAlignment="Center" CellStyle="{StaticResource NumberCellStyle}"> 
              <dxg:GridColumn.EditSettings> 
               <dxe:TextEditSettings HorizontalContentAlignment="Right" /> 
              </dxg:GridColumn.EditSettings> 
              <dxg:GridColumn.Header> 
               <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}, Path=SelectedItem.Header, Converter={StaticResource HeaderAppendConverter}, ConverterParameter='01'}" /> 
              </dxg:GridColumn.Header> 

             </dxg:GridColumn> 
              </dxg:GridColumn> 
            </dxgcore:GridControl.Columns> 
            <dxgcore:GridControl.View> 
             <dxgcore:TableView x:Name="NameGridView" 
             AllowEditing="False" 
             AllowBestFit="True" 
             AllowMoving="True" 
             AllowColumnFiltering="True" 
             IsColumnMenuEnabled="True" 
             ShowGroupPanel="False" 
             ShowAutoFilterRow="True" 
             AutoWidth="False" 
             NavigationStyle="Cell" 
             VerticalScrollbarVisibility="Visible" 
             HorizontalScrollbarVisibility="Visible" 
             RowStyle="{StaticResource customRowStyle}" > 
             </dxgcore:TableView> 
            </dxgcore:GridControl.View> 
           </dxg:GridControl> 

          </Grid> 
         </DataTemplate> 
        </TabControl.ContentTemplate> 
       </TabControl> 


public class WorkSpace : INotifyPropertyChanged 
{ 

    private string headerText; 
    public string HeaderText { get { return headerText; } set { headerText = value; OnPropertyChanged("HeaderText"); } } 

    public override string ToString() 
    { 
     return HeaderText; 
    } 

    private List<Data> data; 
    public List<Data> Data { get { return data; } set { data = value; OnPropertyChanged("Data"); } } 

此行

<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}, Path=Name}" /> 

設置TabControl的名字到文本塊我怎樣才能改變這種狀況,以獲得所選擇的TabItem的標題文字

+0

你能告訴我在XAML代碼中的'TextBlock的地方嗎? –

+0

@HenkaProgrammer xaml textblock在原來的帖子下面的「這行」表示該行顯示tabcontrol名稱 – ANewUser

+0

請問我如何在代碼後面填充TabItems? –

回答

0

流動的轉換器添加到您的項目:

public class HeaderAppendConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return string.Format("{0}{1}",value, parameter); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return Binding.DoNothing; 
    } 
} 

然後添加到您的TabControl容器資源的StaticResource:

<local:HeaderAppendConverter x:Key="HeaderAppedConvrter"/> 

最後更新TextBlock;

<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}, Path=SelectedItem.Header, Converter={StaticResource HeaderAppendConverter}, ConverterParameter=columnSuffix}" /> 
在ConverterParameter

,你可以通過你的自定義字符串

的完整的解決方案是這樣的:

的解決方案結構是: Solution Struct

主窗口XAML代碼:

<Window x:Class="Twest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:Twest" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <ResourceDictionary> 
     <local:HeaderAppendConverter x:Key="HeaderAppendConverter" /> 
    </ResourceDictionary> 
</Window.Resources> 
<Grid> 
    <TabControl Grid.Row="1" Height="Auto" Background="Transparent" x:Name="TabControlMainName"> 
     <TabControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding HeaderText}" /> 
      </DataTemplate> 
     </TabControl.ItemTemplate> 

     <TabControl.ContentTemplate> 
      <DataTemplate x:Name="Tabsitems"> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="50" /> 
         <RowDefinition Height="725" /> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="1600" /> 
        </Grid.ColumnDefinitions> 
        <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}, Path=SelectedItem.Header, Converter={StaticResource HeaderAppendConverter}, ConverterParameter= columnSuffix}" /> 
       </Grid> 
      </DataTemplate> 
     </TabControl.ContentTemplate> 
    </TabControl> 
</Grid> 

的主窗口後面的代碼:

using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Controls; 

namespace Twest 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Loaded += MainWindow_Loaded; 
    } 

    private void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     List<TabItem> tabs = new List<TabItem>(); 
     tabs.Add(new TabItem() { Name = "tab1", Header = "TAB 01" }); 
     tabs.Add(new TabItem() { Name = "tab2", Header = "TAB 02" }); 
     TabControlMainName.ItemsSource = tabs; 
    } 
} 

}