Я просматриваю книгу Самса «Научите себя WPF за 24 часа». В какой-то момент авторы показывают, как можно привязать значение selected-item ListBox к свойству. Я понимаю, это довольно просто. Но когда я пытаюсь создать свой собственный элемент управления ListBox с моими собственными ListBoxItems, я не могу заставить его работать.
Работающий ListBox использует системную коллекцию в качестве свойства ItemsSource:
<ListBox x:Name="FontList"
DockPanel.Dock="Left"
ItemsSource="{x:Static Fonts.SystemFontFamilies}"
Width="160" />
Значение, выбранное из этого ListBox, затем используется в TextBlock следующим образом:
<TextBlock Text="Test"
FontFamily="{Binding ElementName=FontList, Path=SelectedItem}"
TextWrapping="Wrap"
Margin="0 0 0 4" />
Обратите внимание, что для параметра Path установлено значение SelectedItem.
Теперь я хотел установить FontSize с помощью другого ListBox, который содержит 3 разных размера. Вот что я сделал:
<ListBox x:Name="Size" >
<ListBoxItem>10</ListBoxItem>
<ListBoxItem>15</ListBoxItem>
<ListBoxItem>20</ListBoxItem>
</ListBox>
Затем я добавил привязку к атрибуту Size TextBox следующим образом:
<TextBlock Text="Test"
FontFamily="{Binding ElementName=FontList, Path=SelectedItem}"
Size="{Binding ElementName=Size, Path=SelectedItem}"
TextWrapping="Wrap"
Margin="0 0 0 4" />
Размер не меняется при запуске программы. Поэтому я попытался добавить привязку, которую я использовал для размера, к атрибуту Text - чтобы увидеть его значение:
<TextBlock Text="{Binding ElementName=Size, Path=SelectedItem}""
FontFamily="{Binding ElementName=FontList, Path=SelectedItem}"
Size="{Binding ElementName=Size, Path=SelectedItem}"
TextWrapping="Wrap"
Margin="0 0 0 4" />
Я вижу, что он меняется, когда я нажимаю Size ListBox, но я также вижу, что SelectedItem отображается следующим образом (когда я нажимаю запись 15): System.Windows.Controls.ListBoxItem: 15
Мои вопросы: 1) Какое фактическое значение возвращает путь SelectedItem? Это «System.Windows.Controls.ListBoxItem: 15» или «15»? Если это не 15, как я могу указать путь, который возвращает только 15, а не System.Windows.Controls.ListBoxItem: 15?
2) Почему работает FontFamily SelectItem? Я понимаю, что FontList исходит из коллекции имен шрифтов System, но мне неясно, почему ListBox не возвращает коллекцию ListBoxItems в виде текста. Если моя ссылка на ListBox Path возвращает объект SelectedItem типа ListBoxItem, тогда я бы подумал, что могу использовать Path of SelectedItem.Value или что-то в этом роде, но это не работает, и Intellisense не может мне помочь.
Я хочу, чтобы этот пример работал, потому что он поможет прояснить некоторые мои недоразумения. Пожалуйста, не реорганизуйте решение, чтобы заставить его работать каким-то другим способом, если только для меня совершенно невозможно иметь ссылку на путь, которая даст мне только числовую часть моего выбранного элемента ListBoxItem размера.