Windows Presentation Foundation
A part of the .NET Framework that provides a unified programming model for building line-of-business desktop applications on Windows.
2,824 questions
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Here's the Custom Control, CustomSelector:
public class CustomSelector : Selector
{
static CustomSelector() { DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomSelector), new FrameworkPropertyMetadata(typeof(CustomSelector))); }
protected override void OnSelectionChanged(SelectionChangedEventArgs e) { Debug.WriteLine("OnSelectionChanged"); }
}
and in Themes\Generic.xaml
I've these for CustomSelector:
<Style TargetType="{x:Type local:CustomSelector}">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomSelector}">
<ScrollViewer>
<ItemsPresenter/>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Border x:Name="border" Padding="2 0 2 0">
<TextBlock Text="{Binding}"/>
</Border>
<DataTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="Border.Background" Value="SkyBlue"/>
<Setter TargetName="border" Property="Border.BorderBrush" Value="Red"/>
<Setter TargetName="border" Property="Border.BorderThickness" Value="1"/>
</Trigger>
<Trigger Property="Selector.IsSelected" Value="True">
<Setter TargetName="border" Property="Border.Background" Value="LightGray"/>
<Setter TargetName="border" Property="Border.BorderBrush" Value="Red"/>
<Setter TargetName="border" Property="Border.BorderThickness" Value="1"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
When I hover over items IsMouseOver
styles get applied on items BUT when I left click on an Item it neither applies the style in Selector.IsSelected
nor invokes the protected override void OnSelectionChanged
function.