2015-05-26 5 views
0

У меня есть граница внутри DataTemplate для ListBox. Когда мышь над элементом, я хочу показать границу. Вот мой XAML:WPF ListBoxItem Стиль не работает

<ListBox Grid.Row="3" 
      Grid.Column="0" 
      ItemsSource="{Binding Devices}" 
      SelectedItem="{Binding SelectedDevice}" 
      MaxWidth="350"> 

    <ListBox.Resources> 
     <Style TargetType="ListBoxItem"> 
      <Style.Resources> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> 
       <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/> 
      </Style.Resources> 
     </Style> 
    </ListBox.Resources> 

    <ListBox.ItemTemplate> 
     <DataTemplate> 

      <Border BorderBrush="SteelBlue" 
        BorderThickness="0" 
        HorizontalAlignment="Stretch" 
        CornerRadius="3" 
        MinHeight="65" 
        Margin="3"> 

       <Border.Style> 
        <Style> 
         <Style.Triggers> 
          <Trigger Property="Border.IsMouseOver" Value="True"> 
           <Setter Property="Border.BorderThickness" Value="1" /> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
       </Border.Style> 

       <Grid> 

        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="*"/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 

        <Image Grid.Row="0" 
          Grid.RowSpan="2" 
          Grid.Column="0" 
          Source="/DFT.Falcon6.UI.Desktop;component/Media/Images/fc6logo.png" 
          Height="50" 
          Width="50" 
          Margin="5"/> 
        <TextBlock Grid.Row="0" 
           Grid.Column="1" 
           Text="{Binding UnitIdentifier}" 
           Style="{StaticResource devicetextStyle}" 
           Margin="2"/> 
        <TextBlock Grid.Row="1" 
           Grid.Column="1" 
           Text="{Binding IPAddress}" 
           Style="{StaticResource devicetextStyle}" 
           Margin="2"/> 

       </Grid> 

      </Border> 

     </DataTemplate> 
    </ListBox.ItemTemplate> 

</ListBox> 

Вы можете видеть, что у меня есть триггер, определенный в Пограничный контроль, чтобы установить BorderThickness 1. Однако, когда я запускаю его и мыши на элемент, ничего не происходит.

Что я здесь делаю неправильно?

Благодаря

+0

Вы пытались установить TargetType стиля на Border вместо Border.IsMouseOver? – mgarant

ответ

2

Попробуйте это:

<Style> 
    <Setter Property="BorderThickness" Value="0" /> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="BorderThickness" Value="1" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

стиль применяется к элементу управления границами, поэтому нет необходимости указывать «Border» снова на переплетах. Я обнаружил, что иногда (всегда?) Кажется, что атрибут, определенный непосредственно в элементе управления, переопределит это изменение от триггера. Вам также придется удалить атрибут borderTickness из пограничного элемента управления.

Также следите за выходным окном во время работы. Ошибки привязки будут выполняться молча в приложении, но обычно отображаются в виде красного текста в окне вывода, что иногда помогает отслеживать ошибки.

+0

Это сделало. спасибо – CoderForHire