2013-01-05 30 views
0

我想在我的DataTemplate中設置一個觸發器,以便當源對象的屬性HasUnreadMessages設置爲true時,標題文本將變爲紅色。但從數據模板中的觸發器內部,我不知道如何引用標頭的TextBlock如何從TabItem的DataTemplate中找到ItemTemplate

全碼:

<Window x:Class="IRC.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:loc="clr-namespace:IRC" 
     Title="" Height="350" Width="525"> 

    <Window.Resources> 
     <DataTemplate DataType="{x:Type loc:Tab}"> 
      <DockPanel> 
       <ListBox x:Name="lstUsers" ItemsSource="{Binding Users}" Visibility="Collapsed" DockPanel.Dock="Right" /> 
       <ListBox x:Name="lstMessage" ItemsSource="{Binding Messages}" /> 
      </DockPanel> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding Type}" Value="Channel"> 
        <Setter TargetName="lstUsers" Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding HasUnreadMessages}" Value="True"> 
        <Setter TargetName="tabHeader" Property="Foreground" Value="Red" /> // -- ERROR 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </Window.Resources> 

    <DockPanel> 
     <Menu DockPanel.Dock="Top"> 
      <MenuItem Header="_Actions"> 
       <MenuItem Header="_Connect" InputGestureText="Alt+C" Click="Connect" /> 
      </MenuItem> 
     </Menu> 
     <TextBox Name="txtInput" Height="22" VerticalContentAlignment="Center" SpellCheck.IsEnabled="True" DockPanel.Dock="Bottom" /> 
     <TabControl Name="pnlTabs" ItemsSource="{Binding}" ContentTemplate="{Binding}" DockPanel.Dock="Top"> 
      <TabControl.ItemTemplate> 
       <DataTemplate> 
        <TextBlock x:Name="tabHeader" Text="{Binding Name}"/> 
       </DataTemplate> 
      </TabControl.ItemTemplate> 
     </TabControl> 
    </DockPanel> 
</Window> 

錯誤:

The name "tabHeader" is not recognized. 
The member "Foreground" is not recognized or is not accessible. 

標籤:

public class Tab 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
    public ObservableCollection<string> Users { get; set; } 
    public ObservableCollection<string> Messages { get; set; } 
    public bool HasUnreadMessages { get; set; } 
} 
+0

什麼是'你正在templatin Tab' G? – Blachshma

+0

@Blachshma請看我的編輯謝謝。 – sprocket12

回答

0

你試圖改變一個對象,它是不是一個性質此時已知。

而是把DataTrigger上Tab的,移動DataTrigger到TabItem - 因爲它是你想改變的TabItem ...

在你的情況下,添加一個TabItem的風格:

<Window.Resources> 
<DataTemplate DataType="{x:Type TabItem}" x:Key="ItemTemplateStyle"> 
      <TextBlock x:Name="tabHeader" Text="{Binding Name}"/> 
     <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding HasUnreadMessages}" Value="True"> 
      <Setter TargetName="tabHeader" Property="Foreground" Value="Red" /> 
     </DataTrigger> 
     </DataTemplate.Triggers> 
</DataTemplate> 

,並將其設置樣式爲的TabItems:

<TabControl Name="pnlTabs" ItemsSource="{Binding}" ContentTemplate="{Binding}" DockPanel.Dock="Top" 
      ItemTemplate="{StaticResource ItemTemplateStyle}" /> 
相關問題