Wpf 如何为自定义项ControlItem创建IsSelected属性?
我试图通过直接继承ItemsControl(WPF/Silverlight,我对两者使用相同的代码库)来创建自定义ItemsControl。我通过继承ContentControl为它创建了一个Item类。我想为Item类创建IsSelected属性。我反映了ListBoxItem类,但不太清楚IsSelected属性是如何设置的。Wpf 如何为自定义项ControlItem创建IsSelected属性?,wpf,silverlight,wpf-controls,custom-controls,Wpf,Silverlight,Wpf Controls,Custom Controls,我试图通过直接继承ItemsControl(WPF/Silverlight,我对两者使用相同的代码库)来创建自定义ItemsControl。我通过继承ContentControl为它创建了一个Item类。我想为Item类创建IsSelected属性。我反映了ListBoxItem类,但不太清楚IsSelected属性是如何设置的。 任何建议/指针都会非常有用。如果你想要一个项目控件没有列表框功能,但它内部支持选择的概念,你可以轻松创建一个无外观的列表框,它与项目控件没有区别。这是两个并列的,你看
任何建议/指针都会非常有用。如果你想要一个
项目控件
没有列表框
功能,但它内部支持选择的概念,你可以轻松创建一个无外观的列表框
,它与项目控件
没有区别。这是两个并列的,你看不出有什么区别。唯一的区别是左侧列表在内部支持选择
<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>
红色
绿色
蓝色
因此,最好的建议是,如果您想要选择,从
列表框
派生,并去掉您不想要的样式,或者至少从选择器
派生,如果您想要一个项控件
没有列表框
功能,除非它内部支持选择的概念,您可以轻松创建一个无外观的列表框
,它与项控件
无法区分。这是两个并列的,你看不出有什么区别。唯一的区别是左侧列表在内部支持选择
<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>
红色
绿色
蓝色
因此,最好的建议是,如果您想要选择,从
列表框
派生并去掉您不想要的样式,或者至少从选择器
派生为什么您选择扩展项控件
,而不是选择器
或列表框
,哪个已经实现了选择行为?我同意Daniel的观点。我还没有找到创建ItemsControl自定义实现的理由。希望的扩展功能是什么,因为它可能足够简单,可以通过模板或其他方式更改控件的工作方式。可能是这样的:Set SelectedItem(ItemsControl)->在setter中查找控件容器->Set IsSelected。相反,您可以使用PropertyChanged事件。为什么选择扩展ItemsControl
,而不是已经实现选择行为的选择器
或列表框
。我还没有找到创建ItemsControl自定义实现的理由。希望的扩展功能是什么,因为它可能足够简单,可以通过模板或其他方式更改控件的工作方式。可能是这样的:Set SelectedItem(ItemsControl)->在setter中查找控件容器->Set IsSelected。相反,您可以使用PropertyChanged事件。