Удаление WPF ListView/GridView выделяет хром

Не находя это - исключительное событие (т.е. это должно там произойти при нормальных обстоятельствах), то бросьте. Иначе возвратитесь, "не найденное" значение (может быть пустым, но не имеет к), или даже имейте возврат метода булевская переменная для найденного/незнакомого и параметр для фактического объекта.

8
задан Tony 9 August 2009 в 19:37
поделиться

3 ответа

Если у вас установлен Windows SDK, вы можете найти исходный код XAML для всех стилей по умолчанию (при условии, что вы установили образцы) в:

% ProgramFiles% \ Microsoft SDKs \ Windows \ v6.1 \ Samples \ WPFSamples.zip

ZIP-файл содержит папку Core, которая содержит AeroTheme, LunaTheme и т. Д., Которые содержат исходные коды стилей по умолчанию. К сожалению, эти файлы довольно большие (~ 8500 строк для Aero) и не очень хорошо структурированы или отформатированы (IMO).

Шаблон управления по умолчанию для ListViewItem выглядит так:

<ControlTemplate TargetType="{x:Type ListViewItem}">
  <Border CornerRadius="2" SnapsToDevicePixels="True"
          BorderThickness="{TemplateBinding BorderThickness}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          Background="{TemplateBinding Background}">
    <Border Name="InnerBorder" CornerRadius="1" BorderThickness="1">
      <Grid>
        <Grid.RowDefinitions>
          <RowDefinition MaxHeight="11" />
          <RowDefinition />
        </Grid.RowDefinitions>

        <Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF" />
        <GridViewRowPresenter Grid.RowSpan="2" 
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
      </Grid>
    </Border>
  </Border>

  <ControlTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
      <Setter Property="Background" Value="{StaticResource ListItemHoverFill}" />
      <Setter Property="BorderBrush" Value="#FFCCF0FF" />
      <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
    </Trigger>

    <Trigger Property="IsSelected" Value="True">
      <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" />
      <Setter Property="BorderBrush" Value="#FF98DDFB" />
      <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#80FFFFFF" />
      <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
      <Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF" />
    </Trigger>

    <MultiTrigger>
      <MultiTrigger.Conditions>
        <Condition Property="IsSelected" Value="True" />
        <Condition Property="Selector.IsSelectionActive" Value="False" />
      </MultiTrigger.Conditions>

      <Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}" />
      <Setter Property="BorderBrush" Value="#FFCFCFCF" />
    </MultiTrigger>

    <MultiTrigger>
      <MultiTrigger.Conditions>
        <Condition Property="IsSelected" Value="True" />
        <Condition Property="IsMouseOver" Value="True" />
      </MultiTrigger.Conditions>

      <Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}" />
      <Setter Property="BorderBrush" Value="#FF98DDFB" />
    </MultiTrigger>

    <Trigger Property="IsEnabled" Value="False">
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
    </Trigger>
  </ControlTemplate.Triggers>
</ControlTemplate>

Лучше всего удалить все выделения, вероятно, чтобы заменить ControlTemplate вашим собственным, который просто включает GridViewRowPresenter (возможно, в одной границе). Не забудьте включить триггер, который закрашивает элементы серым, когда управление отключено.

14
ответ дан 5 December 2019 в 07:36
поделиться

Я не стою перед ПК с Windows, чтобы проверить это прямо сейчас, но у меня была аналогичная проблема со списками, которую я исправил, поместив следующее в свой Window.Resources

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />

Не уверен, что это будет работать с вашим списком.

8
ответ дан 5 December 2019 в 07:36
поделиться

Используя ваш код, я вообще не вижу ни одной строки. Какая у вас тема по умолчанию прямо сейчас? Луна, Аэро и т. Д.? Может быть, ваш отличается от моего, поэтому разница в хроме. Есть ли какие-либо другие настройки в вашем ListView ?

Style Snooper или Show Me The Template могут помочь вам отследить визуальный элемент, отвечающий за строку, которую вы видя. Вас также может заинтересовать повторный шаблон вашего ListView для получения желаемого эффекта.

0
ответ дан 5 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: