2013-01-20 58 views
4

好的,我搜索了無處不在,並在每一個鏈接我去我的問題是解釋與xaml代碼。在C#和XAML中更改活動選項卡的背景

我想更改活動標籤的背景和前景(不是它的內容,但你爲了讓活躍選擇上部)在WPF項目,但我在尋找的C#代碼。下面的代碼不爲我工作:

if (tabs[0].IsEnabled) tabs[0].Background = Brushes.Blue; 

else tabs[0].Background = Brushes.Black; 
+0

@Venson因爲「標籤」是一個List <>,它是不是在XAML代碼。 – Bonnev

+1

您可以[綁定](http://msdn.microsoft.com/en-us/library/ms752347.aspx)到TabCOntrol的屬性'ItemsSource'。不只是定義一個[Styletrigger](http://msdn.microsoft.com/en-us/library/ms743015.aspx)來更改背景 – Venson

+0

我會進行一項研究並查看一些關於「綁定」的示例,謝謝很多! – Bonnev

回答

4

如果您使用WPF,請在XAML中執行此操作。

您可以將bind添加到TabControl的屬性ItemsSource。不僅僅是定義Styletrigger改變背景

0
foreach(var tab in tabs) 
{ 
    tab.Background = tab.IsEnabled ? Brushes.Blue :Brushes.Black; 
} 

但是你可以在活動標籤的變化和停用和激活標籤的設置背景處理的tabcontrol的狀態。

+0

您的實例無法正常工作,標籤在不活動時變爲藍色,但在活動時仍爲白色 – Bonnev

+0

它如何變白?我設置了藍色或黑色。你在哪裏調用這個代碼? –

2

OK,感謝Venson我終於得到它,以防萬一有人想知道它是如何工作的:

<TabControl ItemsSource="{Binding tabs}" Height="68" HorizontalAlignment="Left" Margin="156,23,0,0" Name="tabControl1" VerticalAlignment="Top" Width="268"> 
     <TabControl.ItemContainerStyle> 
      <Style TargetType="TabItem"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TabItem}"> 
          <Grid> 
           <Border 
            Margin="0,0,-4,0" 
            Background="Black" 
            BorderBrush="Blue" 
            BorderThickness="1,1,1,1" 
            CornerRadius="2,12,0,0" > 
            <ContentPresenter x:Name="ContentSite" 
             VerticalAlignment="Center" 
             HorizontalAlignment="Center" 
             ContentSource="Header" 
             Margin="12,2,12,2" 
             RecognizesAccessKey="True"/> 
           </Border> 
          </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="Foreground" Value="Blue"></Setter> 
       <Style.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type TabItem}"> 
            <Grid> 
             <Border 
              Margin="0,0,-4,0" 
              Background="Green" 
              BorderBrush="Blue" 
              BorderThickness="1,1,1,1" 
              CornerRadius="2,12,0,0" > 
              <ContentPresenter x:Name="ContentSite" 
               VerticalAlignment="Center" 
               HorizontalAlignment="Center" 
               ContentSource="Header" 
               Margin="12,2,12,2" 
               RecognizesAccessKey="True"/> 
             </Border> 
            </Grid> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TabControl.ItemContainerStyle> 
    </TabControl> 

此代碼放在的<Grid>MainWindow.xaml

public MainWindow() 
    { 
    testClass testObject = new testClass(); 

    testObject.tabs = new List<TabItem>(); 

    testObject.tabs.Add(new TabItem()); 
    testObject.tabs.Add(new TabItem()); 

    testObject.tabs[0].Header = "NO WAY"; 
    testObject.tabs[1].Header = "ON WAY"; 

    testObject.tabs[0].Content = "WHAT"; 
    testObject.tabs[1].Content = "HELL"; 

    InitializeComponent(); 

    this.DataContext = testObject ; 
} 
class testClass 
{ 
    public List<TabItem> tabs { set; get; } 
} 

這個<Window>標籤進入MainWindow.xaml.cs文件。

請注意:顏色只用於測試,不要因爲我選擇的不好的對比度而判斷我!

我不知道是否有可能不使用另一個類,但..

+0

如果你真的想使用WPF,你應該通知自己[MVVM](http://en.wikipedia.org/wiki/Model_View_ViewModel),因爲它是可能的;-)。隨意問 – Venson

相關問題