Друзья!
Долго не мог придумать тему топа, собственно как и не понимаю особо что гуглить.
Попробую донести суть задачи.
Есть приложение, у него Main Window, в котором располагаются всякие мои контролы.
Есть у меня такой контрол, который содержит в себе ListBox (который настраивается определенными шаблонами)
Каждый item'a в листбоксе состоит из 2х частей (основное содержимое и настраиваемое извне (из основного окна, например)
Когда item селектится, у него появляется дополнительное содержимое (чтобы там все красиво выдвигалось и т.д. я сделал).
И думал, что настроить то, что там будет показываться будет предельно просто, примерно так:
XAML Шаблон для айтема:
<UserControl x:Class="OFTD.Controls.WPF.Common.PagesListBoxControl"
xmlns:src="clr-namespace:OFTD.Controls.WPF.Common"
x:Name="MainControl">
...
<ContentControl DockPanel.Dock="Bottom" x:Name="ExtendedContent" Visibility="Visible" Opacity="0" >
<FrameworkElement.LayoutTransform>
<ScaleTransform ScaleX="1" ScaleY="0"/>
</FrameworkElement.LayoutTransform>
<ContentControl.Style>
<Binding Source="MainControl" Mode="OneWay" Path="src:PagesListBoxControl.ExtendedContentStyle">
</Binding>
</ContentControl.Style>
...
Создал в своем контроле PagesListBoxControl зависимое свойство
public static readonly DependencyProperty ExtendedContentStyleProperty = DependencyProperty.Register
(
"ExtendedContentStyle"
, typeof(Style)
, typeof(PagesListBoxControl)
, new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange)
);
public Style ExtendedContentStyle
{
get { return (Style) GetValue(ExtendedContentStyleProperty); }
set { SetValue(ExtendedContentStyleProperty, value); }
}
ну и из основного окна создаю сам контрол (XAML):
<cwpfc:PagesListBoxControl Width="Auto" Height="Auto" Name="_fragmentsVertical">
<cwpfc:PagesListBoxControl.ExtendedContentStyle>
<Style>
<Setter Property="ContentControl.ContentTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type s:String}">
<StackPanel Orientation="Horizontal">
<Button Content="{Binding}"></Button>
<Button>111</Button>
<Button>222</Button>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</cwpfc:PagesListBoxControl.ExtendedContentStyle>
Для каждого айтема будет определенные данные, эту проблему решил с помощью IValueConverter'a
Но вот не получается заставить расширенное моё содержимое рисовать мои кнопочки.
Да даже не в этом вопрос собственно.
Как бы вы сделали, если бы стояла задача:
ЛистБокс с айтемами, у которые есть определенные шаблон внутри самой реализации листбокса, а также есть какое-то расширяемое содержимое, которое биндится к определенным данным для каждого айтема и внешний вид которого (добавлять кнопки с командами, всякие тексты и т.д) можно бы было конфигурировать извне?
С нетерпением жду ответов!
С уважением, Иван