Маркированный список WPF с привязкой к данным
-
22-08-2019 - |
Вопрос
Как создать маркированный список гиперссылок с привязкой к данным в WPF?
У меня есть это:
<ItemsControl Name="lstScripts">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink>
<TextBlock Text="{Binding Path=Name}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Но я не могу понять, как превратить предметы в пули.Я вижу BulletDecorator, но не хочу указывать собственное изображение маркера, мне нужны только стандартные маркеры.
Решение
К сожалению, не существует "стандартных пуль"...Вот пример простой эллиптической пули:
<ItemsControl Name="lstScripts">
<ItemsControl.ItemTemplate>
<DataTemplate>
<BulletDecorator Width="Auto">
<BulletDecorator.Bullet>
<Ellipse Fill="White" Stroke="Black" StrokeThickness="1" Width="8" Height="8"/>
</BulletDecorator.Bullet>
<TextBlock>
<Hyperlink>
<TextBlock Text="{Binding Path=Name}" />
</Hyperlink>
</TextBlock>
</BulletDecorator>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Другие советы
Просто чтобы немного расширить ответ @Thomas Levesque, превратите его в UserControl, чтобы вы могли использовать его повторно, например:
<Reporting:BulletedItem BulletText="Bullet Item 1" />
<Reporting:BulletedItem BulletText="Bullet Item 2" />
Создайте UserControl:
<UserControl x:Class="MyNameSpace.Reporting.BulletedItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" >
<Grid>
<ItemsControl >
<BulletDecorator Width="Auto" Margin="10, 0, 0, 0">
<BulletDecorator.Bullet>
<Ellipse Fill="Black" Stroke="Black" StrokeThickness="1" Width="5" Height="5"/>
</BulletDecorator.Bullet>
<TextBlock Margin="5, 0, 0, 0">
<TextBlock Text="{Binding BulletText}" />
</TextBlock>
</BulletDecorator>
</ItemsControl>
</Grid>
</UserControl>
В коде:
public partial class BulletedItem : UserControl
{
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("BulletText", typeof(string), typeof(BulletedItem));
public string BulletText
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public BulletedItem()
{
InitializeComponent();
this.DataContext = this;
}
}
Для всех видов списков вы можете использовать FlowDocument и List.Он имеет стиль маркера «Диск» и один «Круг».
<FlowDocument>
<List MarkerStyle="Disc">
<ListItem>
<Paragraph>Boron</Paragraph>
</ListItem>
<ListItem>
<Paragraph>Carbon</Paragraph>
</ListItem>
</<FlowDocument>
Подробности здесь: https://msdn.microsoft.com/library/aa970909(v=vs.100).aspx
Не связан с StackOverflow