У меня есть виджеты, отображающие данные объекта. Я сделал пользовательские элементы управления для отображения данных для каждой сущности.
<UserControl x:Class="Widget"
<Border BorderBrush="#FF000000" CornerRadius="10" Width="220" Height="180">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="BorderThickness" Value="5"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsSelected}" Value="False">
<Setter Property="BorderThickness" Value="1"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel Orientation="Vertical">
<Label>Name</Label>
</StackPanel>
</Border>
</UserControl>
и код, стоящий за
public partial class Widget: UserControl
{
/// <summary>
/// Is Selected Dependency property
/// </summary>
public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register("IsSelected", typeof(bool), typeof(StationStatus), new PropertyMetadata(false));
public bool IsSelected
{
get
{
return (bool)GetValue(IsSelectedProperty);
}
set
{
SetValue(IsSelectedProperty, value);
}
}
public Widget()
{
InitializeComponent();
}
}
Пользовательский элемент управления отображается в ListBox
<ListBox ItemsSource="{Binding WidgetData}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionMode="Single">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" Grid.Row="0" ItemHeight="200" ItemWidth="230" Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<view:StationStatus IsSelected="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}, Path=IsSelected}">
</view:StationStatus>
</view:Widget>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Я ожидал IsSelected
от ListBoxItem
будет привязан к пользовательскому элементу управления, и толщина границы изменится, если элемент Listbox
выбран, но не работает должным образом.