0

DataTemplateソースオブジェクトのプロパティHasUnreadMessagesがtrueに設定されている場合にヘッダーテキストが赤になるように、トリガーを設定しようとしています。TextBlockしかし、データテンプレートのトリガーの内部からは、ヘッダーのを参照する方法がわかりません。

フルコード:

<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; }
}
4

1 に答える 1

0

その時点で不明なオブジェクトのプロパティを変更しようとしています。

DataTriggerをに配置する代わりに、 DataTriggerを-Tab移動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}" />
于 2013-01-05T23:10:49.250 に答える