我有一个像这样定义的列表框:
<ListBox x:Name="EmailList"
ItemsSource="{Binding MailBoxManager.Inbox.EmailList}"
SelectedItem="{Binding SelectedMessage, Mode=TwoWay}"
Grid.Row="1">
<ListBox.ItemTemplate>
<DataTemplate>
<usrctrls:MessageSummary />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
UserControl的定义如下:
<UserControl x:Class="UserControls.MessageSummary"
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"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="600">
<UserControl.Resources>
</UserControl.Resources>
<Grid
HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0"
VerticalAlignment="Center" />
<Grid Grid.Column="1" Margin="0,0,12,0">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid Grid.Row="0"
Grid.Column="0"
HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="80" />
<ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>
<Image x:Name="FlaggedImage"
Grid.Column="0"
Width="20"
Height="10"
Margin="0"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Source="/Assets/ico_flagged_white.png" />
<TextBlock x:Name="Sender"
Grid.Column="1"
Text="{Binding EmailProperties.DisplayFrom}"
Style="{StaticResource TextBlock_SenderRowTitle}"
HorizontalAlignment="Left" VerticalAlignment="Center" />
<Grid x:Name="ImagesContainer"
Grid.Column="2" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image x:Name="ImgImportant"
Grid.Column="0"
Width="20"
Height="20"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Source="ms-appx:///Assets/ico_important_red.png" />
<Image x:Name="ImgFolders"
Grid.Column="1"
Width="20"
Height="20"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Source="ms-appx:///Assets/ico_ico_addtofolder.png" />
<Image x:Name="ImgAttachment"
Grid.Column="2"
Width="20"
Height="20"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Source="ms-appx:///Assets/ico_attachment_lightgray.png" />
<Image x:Name="ImgFlag"
Grid.Column="3"
Width="20"
Height="20"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Source="ms-appx:///Assets/ico_flag.png" />
</Grid>
<TextBlock x:Name="Time"
Grid.Column="3"
Text="{Binding EmailProperties.DateReceived, Converter={StaticResource EmailHeaderTimeConverter}}"
TextAlignment="Center"
FontSize="16" VerticalAlignment="Center" Margin="0" />
</Grid>
<TextBlock Grid.Row="1"
Text="{Binding EmailProperties.Subject}"
TextTrimming="WordEllipsis"
Margin="0,10" />
<TextBlock Grid.Row="2"
Text="{Binding EmailProperties.Preview}"
TextTrimming="WordEllipsis" />
</Grid>
</Grid>
MessageSummary是UserControl。我想将ListBoxItems的前景颜色绑定到项目是否是ListBox中选定的一个(IsSelectd属性),即我希望ListBoxItem的前景色(TextBlocks)如果没有被选中则为Black,如果是ListBoxItem则为Blue被选中。
怎么做?
谢谢,
答案 0 :(得分:1)
以下代码证明了这一点。要将颜色传递给自定义控件,您需要定义ItemTemplate
的{{1}}。您的控件必须公开Foreground属性,该属性将绑定到ListBox
TemplatedParent's
。在您的控制范围内,您必须将Foreground
绑定到控件的TextBox
。这是我认为可以做到的唯一方法。
Foreground