我希望能创建一个控件,它具备以下功能:
项容器如下所示:
- 从ItemsControl派生而来
- 可以绑定到枚举的列表
- 对于每个枚举值,它将显示RadioButton
- 当选中特定的RadioButton时,SelectedItem将包含与该RadioButton相关联的枚举值。
项容器如下所示:
public class MyEnumSelectorItem : ContentControl
{
public static readonly DependencyProperty IsSelectedProperty;
static MyEnumSelectorItem()
{
IsSelectedProperty = Selector.IsSelectedProperty.AddOwner(typeof(MyEnumSelectorItem));
}
public bool IsSelected
{
get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); }
}
static readonly DependencyProperty ModeProperty =
DependencyProperty.Register("Mode", typeof(MyEnum), typeof(MyEnumSelector), new PropertyMetadata());
public MyEnum Mode
{
get { return (MyEnum)GetValue(ModeProperty); }
set { SetValue(ModeProperty, value); }
}
}
项目容器类型与选择器控件(派生自System.Windows.Controls.Primitives.Selector
)相关联,使用IsItemItsOwnContainerOverride/GetContainerForItemOverride/PrepareContainerForItemOverride
方法重写。
generic.xaml中相关的片段如下所示:
<Style TargetType="{x:Type controls:MyEnumSelector}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<RadioButton Content="{Binding}"
IsChecked="{Binding IsSelected, Mode=TwoWay}"
GroupName="enumSelector" Height="25" FontWeight="Bold" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
以上假设正确绑定IsSelected属性将自动导致设置SelectedItem属性(我希望这是正确的,不是吗?)。
Selector
派生吗?SelectedItem
是在Selector
上定义的,而不是在ItemsControl
上。 - Adi Lester