Я пытаюсь создать собственный ItemsControl, напрямую наследуя от ItemsControl (WPF/Silverlight, я использую одну и ту же кодовую базу для обоих). Я создал для него класс Item, унаследовав его от ContentControl. Я хочу создать свойство IsSelected для класса Item. Я отразил класс ListBoxItem, но не очень понимаю, как устанавливается свойство IsSelected. Любые предложения / указатели будут действительно полезны.
Как создать свойство IsSelected для пользовательского элемента управления элементами?
Ответы (1)
Если вам нужен ItemsControl
без особенностей ListBox
, за исключением того, что он внутренне поддерживает концепцию отбора, вы можете легко создать невзрачный ListBox
, неотличимый от ItemsControl
. Вот два рядом, и вы не можете сказать разницу. Единственное отличие состоит в том, что левый список поддерживает внутреннюю выборку.
<Grid>
<Grid.Resources>
<x:Array Type="sys:String" x:Key="sampleData">
<sys:String>Red</sys:String>
<sys:String>Green</sys:String>
<sys:String>Blue</sys:String>
</x:Array>
</Grid.Resources>
<UniformGrid Columns="2">
<ItemsControl ItemsSource="{StaticResource sampleData}"/>
<ListBox ItemsSource="{StaticResource sampleData}">
<ListBox.Style>
<Style TargetType="ListBox">
<Setter Property="Focusable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBox">
<ItemsPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.Style>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Focusable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</UniformGrid>
</Grid>
Так что лучший совет, если вы хотите выделения, берите производные от ListBox
и удаляйте то, что вам не нужно, или, по крайней мере, производные от Selector
.
person
Rick Sladkey
schedule
10.01.2011
ItemsControl
, а неSelector
илиListBox
, которые уже реализуют поведение выбора? - person Daniel Pratt   schedule 07.01.2011