Как изменить цвет текста в выбранной строке внутри ListView / GridView?(используя тему Expression Dark) - PullRequest
1 голос
/ 27 мая 2010

Я использую Тему WPF Expression (http://wpfthemes.codeplex.com/) с ListView (свойство view установлено на GridView) для отображения некоторых пользовательских данных, таких как:

<ListView
      Grid.Row="1"
      ItemsSource="{Binding RegisteredUsers}"
      SelectedItem="{Binding SelectedUser}"
      > 
      <ListView.View>
        <GridView>
          <GridViewColumn            
            Header="Login"
            DisplayMemberBinding="{Binding Login}"
            Width="60"/>
          <GridViewColumn
            Header="Full Name"
            DisplayMemberBinding="{Binding FullName}"
            Width="180"/>
          <GridViewColumn
            Header="Last logon"
            DisplayMemberBinding="{Binding LastLogon}"
            Width="120"/>
          <GridViewColumn
            Header="Photo"
            Width="50">
            <GridViewColumn.CellTemplate>
              <DataTemplate>
                <Image 
                  Source="{Binding Photo}" 
                  Width="30" 
                  Height="35"/>
              </DataTemplate>
            </GridViewColumn.CellTemplate>
          </GridViewColumn>
        </GridView>
      </ListView.View>
    </ListView>

Строки имеют белый текст с темным фоном и белым фоном при выборе, однако цвет текста не изменяется при выделении, и это затрудняет чтение, я хотел бы, чтобы текст был темным цветом при выделении строки. Я искал способ стилизовать цвет текста, но безуспешно, вот шаблон элемента управления для ListViewItem:

<Border SnapsToDevicePixels="true" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2" x:Name="border">

            <Grid Margin="2,0,2,0">
              <Rectangle x:Name="Background" IsHitTestVisible="False" Opacity="0.25" Fill="{StaticResource NormalBrush}" RadiusX="1" RadiusY="1"/>
              <Rectangle x:Name="HoverRectangle" IsHitTestVisible="False" Opacity="0" Fill="{StaticResource NormalBrush}" RadiusX="1" RadiusY="1"/>
              <Rectangle x:Name="SelectedRectangle" IsHitTestVisible="False" Opacity="0" Fill="{StaticResource SelectedBackgroundBrush}" RadiusX="1" RadiusY="1"/>
              <GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" />
            </Grid>

</Border>

Триггер, который изменяет цвет фона, просто применяет анимацию для изменения непрозрачности 'SelectedRectangle', но я не могу изменить цвет текста в том же триггере (я пытался использовать установщик для цвета переднего плана в ListViewItem, но без успех).

У кого-нибудь есть подсказка?

Ответы [ 2 ]

0 голосов
/ 27 мая 2010

Решить удалось, применив стиль текстового блока к области действия GridViewRowPresenter:

<GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" >
                                <GridViewRowPresenter.Resources>
                                    <Style        
                                        TargetType="{x:Type TextBlock}"
                                        BasedOn="{StaticResource {x:Type TextBlock}}"
                                        >      
                                        <Style.Triggers>
                                            <DataTrigger
                                                Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}"
                                                Value="True">
                                                <Setter 
                                                    Property="Foreground"
                                                    Value="Black"
                                                    />
                                            </DataTrigger>
                                        </Style.Triggers>                                                                             
                                    </Style>
                                </GridViewRowPresenter.Resources>
                            </GridViewRowPresenter>
0 голосов
/ 27 мая 2010

Попробуйте изменить TextBlock.Foreground

 <GridViewRowPresenter TextBlock.Foreground="{TemplateBinding Foreground}"/>
...