, , . , , , , .
, : ContentPresenter FrameworkElement, ToolBar, FindAncestor , .
, , ContentPresenter, FrameworkElement.
, adorner:
<Toolbar Width="15">
<MenuItem .../>
<MenuItem .../>
</Toolbar>
:
<Toolbar Width="15">
<my:NonFrameworkElementObject />
<my:NonFrameworkElementObject />
</Toolbar>
, FrameworkElement, , ControlTemplate DataTemplate. ContentPresenters, .
ItemSource , . :
MyItems.ItemsSource = ComputeItems();
:
MyItems.ItemsSource = ComputeItems()
.Select(item => new ContentPresenter { Content = item });
ItemsSource XAML, , , (, "DataItemsSource" ) PropertyChangedCallback, DataItemsSource ,.Select(), , ContentPresenters ItemsSource. :
public class MyItemsSourceHelper ...
{
... RegisterAttached("DataItemsSource", ..., new FrameworkPropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
var dataSource = GetDataItemsSource(obj);
obj.SetValue(ItemsControl.ItemsSource,
dataSource==null ? null :
dataSource.Select(item => new ContentPresenter { Content = item });
}
}
:
<Toolbar Width="15" DataTemplate="..."
my:MyItemsSourceHelper.DataItemsSource="{Binding myItems}" />
myItems - FrameworkElement, DataTemplate. ( inline <Toolbar.DataItemsSource><x:Array ...)
, , , ItemsControl.ItemTemplate property. ItemsControl.ItemTemplate, ContentPresenters , ContentTemplate, FindAncestor ItemsControl. " ContentPresenter" "SetBinding".
, .