Я создал пользовательский элемент управления, который (помимо прочего) может отображать множество модулей расширения в ItemsControl.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"> <Style TargetType="{x:Type NxTabControl:NxCategoryControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type NxTabControl:NxCategoryControl}">
<ScrollViewer x:Name="contentScrollViewer" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<StackPanel HorizontalAlignment="Stretch" DockPanel.Dock="Bottom" VerticalAlignment="Stretch" Background="Transparent">
<ItemsControl ItemsSource="{TemplateBinding Content}">
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<Border>
<ItemsPresenter/>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</ScrollViewer>
</DockPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style> </ResourceDictionary>
ItemsControl связан с:
ItemsSource = "{TemplateBinding Content}
Который является ДП в классе:
public class CategoryControl : ItemsControl
{
public ObservableCollection<Expander> Content
{
get { return (ObservableCollection<Expander>)GetValue(ContentProperty); }
set { SetValue(ContentProperty, value); }
}
public static readonly DependencyProperty ContentProperty = DependencyProperty.Register("Content", typeof(ObservableCollection<Expander>), typeof(CategoryControl), new FrameworkPropertyMetadata(new ContentCollection(), FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsParentMeasure)); }
Я использую свой пользовательский элемент управления в пользовательском элементе управления, установив свойство содержимого и добавив в него расширители:
<NxTabControl:NxCategoryControl x:Name="catControl" DockMode="Top" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="Green">
<TabControl:CategoryControl.Content>
<Expander Margin="0 3 0 3" IsExpanded="True" Header="Adresse" >
<ScrollViewer x:Name="ScrollViewerAdresse" HorizontalAlignment="Stretch" ockPanel.Dock="Left">
<Grid Width="{Binding ElementName=ScrollViewerAdresse, Path=ActualWidth, Converter={StaticResource HalfWidthConverter}}">
</Grid>
</ ScrollViewer>
</Expander>
<Expander>
</Expander>
<Expander Header={Binding ExpanderHeader}>
</Expander>
</TabControl:CategoryControl.Content>
Моя проблема в этом контексте заключается в том, что я не могу установить эту привязку:
Grid Width="{Binding ElementName=ScrollViewerAdresse, Path=ActualWidth}"
А также никакой другой привязки, которая идет к «ElementName». Например, я также привязан к XamDataGrids.ActiveRecords по их имени и другим элементам. Ни одна из привязок не работает.
Снуп говорит мне о свойстве ширины сетки:
Ошибка System.Windows.Data: 4: не удается найти источник для привязки со ссылкой «ElementName = ScrollViewerAdresse».
BindingExpression: Path = ActualWidth; DataItem = NULL; целевой элемент - «Сетка»; Целевое свойство - «Ширина» (тип «Двойной»)
Другие привязки, которые я использую в своих расширителях, хотя привязка к ViewModel работы usercontrol работает, например,
Header={Binding ExpanderHeader}
Любая помощь будет приветствоваться! Thx!