Я учу себя программированию на .NET и в настоящее время пытаюсь создать элемент управления облаком тегов в WPF.Цель состоит в том, чтобы иметь 2 списка в окне, причем первый список отображает список «Списков контактов», а второй список отображает «ярлыки» (или теги), связанные с контактными списками.Для ярлыков цель состоит в том, чтобы привязать размер шрифта к itemCount с помощью IValueConverter, поэтому, если у меня есть определенная метка, которая появляется в моей коллекции несколько раз, она будет отображаться более крупным шрифтом в списке меток.Также я заполняю свои элементы управления из базы данных DB2.
Итак, я дошел до отображения списков контактов и меток в правильных списках, у меня просто возникли некоторые проблемы с привязкой.Я использую класс конвертера, который я взял из учебника, и мне было интересно, если кто-нибудь может помочь мне заставить это работать.Большое спасибо - Бен
Свойства
public class Label
{
public int LabelID { get; set; }
public string LabelName { get; set; }
}
ContactListClass
public class ContactList
{
public string ContactListName { get; set; }
public List<Label> Labels { get; set; }
}
Конвертер
public class CountToFontSizeConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
const int minFontSize = 6;
const int maxFontSize = 38;
const int increment = 3;
int count = (int)value;
return ((minFontSize + count + increment) < maxFontSize) ?
(minFontSize + count + increment) :
maxFontSize;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Событие загрузки окна
private void Window_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
//TODO: Add event handler implementation here.
ListCollectionView lcv = new ListCollectionView(myLabels);
lcv.GroupDescriptions.Add(new PropertyGroupDescription("LabelName"));
tagsList.ItemsSource = lcv.Groups;
}
XAML
<Window.Resources>
<local:CountToFontSizeConverter x:Key="CountToFontSizeConverter"/>
<Style x:Key="tagsStyle" TargetType="{x:Type ListBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBox}">
<Grid>
<Border x:Name="Border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"/>
<WrapPanel Orientation="Horizontal"
Margin="2"
IsItemsHost="true"
Background="#FFFCF6F6"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataTemplate x:Key="ContactsTemplate">
<WrapPanel>
<TextBlock TextWrapping="Wrap"
Text="{Binding ContactListName, Mode=Default}"/>
</WrapPanel>
</DataTemplate>
<DataTemplate x:Key="TagsTemplate">
<WrapPanel>
<TextBlock Text="{Binding LabelName, Mode=Default}"
TextWrapping="Wrap"
FontSize="{Binding ItemCount,
Converter={StaticResource CountToFontSizeConverter},
Mode=Default}"
Foreground="#FF0D0AF7"/>
</WrapPanel>
</DataTemplate>
</Window.Resources>
<Grid x:Name="LayoutRoot" Background="#FFCBD5E6">
<ListBox x:Name="contactsList"
SelectionMode="Multiple"
Margin="7,8,0,7"
ItemsSource="{Binding ContactLists, Mode=Default}"
ItemTemplate="{DynamicResource ContactsTemplate}"
HorizontalAlignment="Left"
Width="254"/>
<ListBox x:Name="tagsList"
Margin="293,8,8,8"
ItemsSource="{Binding Labels, Mode=Default}"
ItemTemplate="{StaticResource TagsTemplate}"
Style="{StaticResource tagsStyle}" />
</Grid>