2013-05-10 3 views
24

Я разрабатываю приложение WPF с журналом. Журнал разработан с помощью listView. Listviewitems больше не изменяет внешний вид, когда мышь закончилась или элемент выбран. То, что я решил с этим стилем для списка:WPF: удалить эффект выделения из ListViewItem

<Style x:Key="ItemContainerStyle1" TargetType="ListViewItem"> 
    <Setter Property="HorizontalContentAlignment" Value="Left"/> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="Transparent" /> 
      <Setter Property="BorderThickness" Value="0" /> 
      <Setter Property="Focusable" Value="False" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Этот стиль исправил мои проблемы, но поднял новую проблему. Когда фон установлен на «Прозрачный», теперь я могу видеть этот эффект зависания/глянца, который показан на рисунке ниже, когда мышь находится над элементом просмотра списка.

enter image description here

Я попытался решить эту проблему с этой попытки, но не повезло.

<Style TargetType="{x:Type ListViewItem}"> 
    <Style.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#00000000"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#00000000"/> 
    </Style.Resources> 
</Style> 

У кого-нибудь есть идея, как удалить этот раздражающий эффект наведения?

Заранее спасибо

ответ

72

я не знаю, если это единственное решение, но я сделал это следующим образом (путем установки Template свойства ListViewItem ы):

<ListView.ItemContainerStyle> 
    <Style TargetType="{x:Type ListViewItem}"> 
     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListViewItem}"> 
        <Border 
         BorderBrush="Transparent" 
         BorderThickness="0" 
         Background="{TemplateBinding Background}"> 
         <GridViewRowPresenter HorizontalAlignment="Stretch" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Width="Auto" Margin="0" Content="{TemplateBinding Content}"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ListView.ItemContainerStyle> 

EDIT:

Или, как предлагает Грант Винни (я сам этого не испытывал):

<ListView.ItemContainerStyle> 
    <Style TargetType="{x:Type ListViewItem}"> 
     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListViewItem}"> 
        <ContentPresenter /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ListView.ItemContainerStyle> 
+0

Спасибо, это решить мою проблему :) Использует два дня на этом! Мне было интересно, знаете ли вы хорошую книгу или какие-то хорошие домашние страницы, чтобы узнать о стилизации? – mskydt86

+0

Только [msdn] (http://msdn.microsoft.com/en-US/), http://wpftutorial.net/ и Google, извините .. возможно, у кого-то еще есть идея. – Matmarbon

+11

FWIW, если кто-то сталкивается с этим, кто также определяет свой собственный «ListView.ItemTemplate», вам нужно будет заменить все внутри тегов ControlTemplate одним «». –

2

Для меня, работал хорошо, как это:

<ListView.ItemContainerStyle> 
    <Style TargetType="ListViewItem"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="BorderBrush" Value="Transparent" /> 
     <Setter Property="BorderThickness" Value="0" /> 
     </Trigger> 
    </Style.Triggers> 
    </Style> 
</ListView.ItemContainerStyle> 
2

Эта работа:

<Style TargetType="{x:Type ListViewItem}"> 
<Setter Property="Background" Value="Transparent" /> 
<Setter Property="BorderBrush" Value="Transparent"/> 
<Setter Property="VerticalContentAlignment" Value="Center"/> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type ListViewItem}"> 
      <Grid Background="{TemplateBinding Background}"> 
       <Border Name="Selection" Visibility="Collapsed" /> 
       <!-- This is used when GridView is put inside the ListView --> 
       <GridViewRowPresenter Grid.RowSpan="2" 
             Margin="{TemplateBinding Padding}" 
             HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
             VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
             SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 

      </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

1

не вопрос, но это работает для меня.

<Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="Background" Value="Transparent" /> 
      <Setter Property="BorderBrush" Value="Transparent"/> 
      <Setter Property="VerticalContentAlignment" Value="Center"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
         <Border Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"> 
           <ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Margin="{TemplateBinding Padding}" /> 
          </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
0

У меня была та же проблема, но ни один из ответов не помог мне. Поиск в сети я нашел это решение, и он сработал:

 <ListView.Resources> 
      <Style TargetType="{x:Type ListViewItem}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ListViewItem}"> 
          <GridViewRowPresenter /> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ListView.Resources> 
0

Попробуйте этот инструмент, который работал для меня.

     <Style TargetType="{x:Type ListBoxItem}"> 
          <Setter Property="Background" Value="Transparent" /> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
             <ContentPresenter HorizontalAlignment="Left" Margin="2,3,2,3" /> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </ListBox.ItemContainerStyle> 
Смежные вопросы