Связывание в CustomControl - PullRequest
       23

Связывание в CustomControl

1 голос
/ 10 октября 2011

Я создал пользовательский элемент управления, который (помимо прочего) может отображать множество модулей расширения в 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!

...