Стилизация гиперссылки переднего плана в виде списка не происходит - PullRequest
1 голос
/ 09 ноября 2010

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

У меня есть ListView, для которого listivew ItemTemplate представляет собой Datatemplate, который выглядит следующим образом:

<DataTemplate x:Key="template" >
  <TextBlock  Foreground="Green"  >
    <Hyperlink   Command="{Binding LoadReportCommand}"
              CommandParameter="{Binding DisplayName}"  >
            <TextBlock  Text="{Binding DisplayName}"  />
    </Hyperlink>       
   </TextBlock>
</DataTemplate>

Стиль для гиперссылки следующий:

<Style x:Key="{x:Type Hyperlink}" TargetType="{x:Type Hyperlink}">
    <Setter Property="Foreground" Value="Green" />
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding RelativeSource={RelativeSource   FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}" Value="True" />
            <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Path=Selector.IsSelectionActive}" Value="True" />
            </MultiDataTrigger.Conditions>
            <Setter Property="Foreground" Value="White"/>
        </MultiDataTrigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
        </Trigger>
    </Style.Triggers>
</Style>

Когда я использую его как есть, он не становится белым на переднем плане, как это ожидалось бы при выборе элемента.Он становится серым на переднем плане, если команда не включена, как ожидается.Если я удаляю условие для Selector.IsSelectionActive, оно делает передний план белым, когда элемент выделен, но также белым, если элемент выбран, но не активен ... Я хочу, чтобы неактивное выделение было зеленым.Я пробовал это также с помощью простого текстового блока, кнопки с очень простым стилем ... кажется, ничего не работает.

Представление списка находится в пользовательском контроле, который используется в другом пользовательском элементе управления.Datatemplate находится в Resourcedictionary второго пользовательского элемента управления и привязан к свойству зависимостей первого пользовательского элемента управления типа DataTemplate, а стиль для гиперссылки находится в отдельном Resourcedictionary.

Любая помощь будет высоко ценится

1 Ответ

3 голосов
/ 09 ноября 2010

Hmm Selector.IsSelectionActive это ложь, когда элемент управления не имеет фокуса? Если это так, может быть, вы могли бы использовать привязку предков к списку и проверить фокус?

Теперь, когда я смотрю на это - вы привязываетесь к присоединенному свойству - для этого есть слегка измененный синтаксис - попробуйте вместо этого Path = (Selector.IsSelectionActive)}.

Зеленые ссылки - странно:)

...