Я пытаюсь создать настраиваемый контрольный список проверенных списков в WPF с настраиваемым элементом Checkedlistbox
Xaml-код для selectedlistboxitem:
<Style TargetType="{x:Type local:CheckedListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CheckedListBoxItem}">
<CheckBox VerticalContentAlignment="Center" Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=Content}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Xaml-код для проверенного списка:
<Style TargetType="{x:Type local:CheckedListBox}" BasedOn="{StaticResource {x:Type ListBox}}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<local:CheckedListBoxItem Content="{Binding Name}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Проверенный класс Listbox:
public class CheckedListBox : ListBox
{
static CheckedListBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CheckedListBox), new FrameworkPropertyMetadata(typeof(CheckedListBox)));
}
public string ItemBindingName
{
get { return (string)GetValue(ItemBindingNameProperty); }
set { SetValue(ItemBindingNameProperty, value); }
}
// Using a DependencyProperty as the backing store for ItemBindingName. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ItemBindingNameProperty =
DependencyProperty.Register("ItemBindingName", typeof(string), typeof(CheckedListBoxItem), new PropertyMetadata(""));
}
Проверенный класс listboxitem:
public class CheckedListBoxItem : ListBoxItem
{
static CheckedListBoxItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CheckedListBoxItem), new FrameworkPropertyMetadata(typeof(CheckedListBoxItem)));
}
}
и использование его в окне со следующим кодом xaml:
<GroupBox Grid.Column="2" Style="{StaticResource GroupBoxStyle}" Header="Choose Categories :" >
<local:CheckedListBox ItemsSource="{Binding AllCategories}" ItemBindingName="{Binding Name}" />
</GroupBox>
Мне нужно следующее:
Чтобы сделать этот customcheckedlistbox настолько обобщенным c, чтобы мне не приходилось вводить имя свойства, к которому я привязываю, в самом шаблоне (т.е. я хочу чтобы удалить часть Content = "{Binding Name}" из шаблона), вместо этого я создал свойство зависимостей с именем "ItemBindingName" для флажка selectedlist, и я хочу, чтобы шаблон элемента связывал свойство, имя которого содержится в свойстве ItemBindingName (т.е. когда я пишу ItemBindingName = "{Binding xxx}" в объявлении checklistbox, шаблон автоматически привязывается к свойству "xxx")
Извините, если моя очередь Звучание звучит недостаточно понятно, я очень старался упростить его, это лучшее, что я могу получить.