Есть UserControl
Вот его разметка
<UserControl x:Class="WpfApplication22.RatingBar"
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"
xmlns:local="clr-namespace:WpfApplication22"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
x:Name="ratingBar" Loaded="ratingBar_Loaded">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="RatingBarDefaultStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<ItemsControl ItemsPanel="{Binding PanelTemplate, ElementName=ratingBar}"
ItemsSource="{Binding Buttons, ElementName=ratingBar}"
ItemTemplate="{Binding ButtonTemplate, ElementName=ratingBar}"
HorizontalAlignment="Center" VerticalAlignment="Center">
</ItemsControl>
</UserControl>
Код я приводить не стал, потому что его много и я не знаю что тут может пригодиться.
Суть вот в чем. Контрол должен отрисовывать некие объекты по количеству равному значению некоторого DependencyProperty (по умолчанию 5).
Так вот, в рантайме все отлично работает, но в дизайнере контрол не отрисовывается. Помогите разобраться.
UPD
Привожу код RatingBarDefaultStyle.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication22">
<Style TargetType="local:RatingBar">
<Setter Property="PanelTemplate">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" IsItemsHost="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ButtonTemplate" >
<Setter.Value>
<DataTemplate DataType="local:RatingButton">
<CheckBox IsChecked="{Binding IsChecked}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
UPD2
Привожу код свойств для темплейтов
public DataTemplate ButtonTemplate
{
get { return (DataTemplate)GetValue(ButtonTemplateProperty); }
set { SetValue(ButtonTemplateProperty, value); }
}
public static readonly DependencyProperty ButtonTemplateProperty =
DependencyProperty.Register("ButtonTemplate", typeof(DataTemplate), typeof(RatingBar), new FrameworkPropertyMetadata(default(DataTemplate)));
public ItemsPanelTemplate PanelTemplate
{
get { return (ItemsPanelTemplate)GetValue(PanelTemplateProperty); }
set { SetValue(PanelTemplateProperty, value); }
}
public static readonly DependencyProperty PanelTemplateProperty =
DependencyProperty.Register("PanelTemplate", typeof(ItemsPanelTemplate), typeof(RatingBar), new FrameworkPropertyMetadata(default(ItemsPanelTemplate)));
Полагаю, дело в дефолтных значениях для свойств зависимостей. Они по умолчанию равны null, а должны иметь какое то дефолтное значение. Не знаю пока че с этим делать.
WPF не поддерживает подключение стилей по умолчанию в самом контроле. Кроме того, у таких стилей по умолчанию есть еще одна проблема: явно заданный пользователем стиль отменит все ваши настройки по умолчанию вместо того чтобы перекрывать их по одной.
Вместо использования стилей разместите ваши шаблоны в словаре ресурсов после чего укажите в качестве значения по умолчанию при создании DependencyProperty
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть две коллекции, которые нужно вывести в одном циклеКак мне лучше всего это реализовать? Можно ли использовать foreach или нет?
Необходимо организовать сбор почты со стороннего сервера по POP3, обработать письма и по SMTP отправить на наш сервер microsoft exchangeДак вот, как собрать...