Привязка заголовка и содержимого динамически к расширителю - PullRequest
0 голосов
/ 03 марта 2020

Сначала я вижу тип для заголовка и содержимое для расширителя, он говорит, что тип является объектом. У меня есть пользовательский элемент управления с именем CommonExpanderUserControl следующим образом:

xaml:

<uwpControls:Expander Header="{Binding HeaderContent}" Content="{Binding MainContent}">

</uwpControls:Expander>

В xaml.cs (DataContext установлен в это)

  public static readonly DependencyProperty HeaderContentProperty =
      DependencyProperty.Register("HeaderContent", typeof(object), typeof(CommonExpanderUserControl), new
         PropertyMetadata(null));

        public object HeaderContent
        {
            get { return (object)GetValue(HeaderContentProperty); }
            set { SetValue(HeaderContentProperty, value); }
        }


        public static readonly DependencyProperty MainContentProperty =
    DependencyProperty.Register("MainContent", typeof(ContentControl), typeof(CommonExpanderUserControl), new
       PropertyMetadata(null));

        public ContentControl MainContent
        {
            get { return (ContentControl)GetValue(MainContentProperty); }
            set { SetValue(MainContentProperty, value); }
        }

Теперь я Я использую этот UserControl где-то снаружи, как показано ниже:

<UserControl.Resources>
<ContentControl x:Key="Header">
                <Grid x:Name="ExpanderHeaderGrid" HorizontalAlignment="Stretch" Padding="0" Margin="0" 
                      Background="{Binding LisSharedSettings.ChangeHeaderColor,Converter={StaticResource BoolToSolidBrushConverter}}">
                    <TextBlock x:Name="TextBlockLisSharedSettingsTitle" 
                                   x:Uid="/Application.GlobalizationLibrary/Resources/InstrumentSettingsViewLisSettingsTextBlockTitle"
                                   Style="{StaticResource TextBlockStyleSectionHeader}"/>
                </Grid>
            </ContentControl>

<ContentControl x:Key="Body">
Some content here.
</ContentControl>
</UserControl.Resources>
<Grid>
            <local:CommonExpanderUserControl HeaderContent="{StaticResource Header}" MainContent="{StaticResource Body}"/>
</Grid>

Контроль за связыванием контента, как это просто не работает. Если я удаляю привязку MainContent и связываю только заголовок, он говорит, что ссылка на объект не установлена ​​на экземпляр объекта. Пожалуйста помоги.

1 Ответ

0 голосов
/ 04 марта 2020

Проблема возникает StaticResource привязка, мы не могли связать заголовок с контролем с помощью StaticResource. А для этого сценария лучше всего связать HeaderTemplate и отправить источник данных в свойство заголовка, как показано ниже.

<UserControl.Resources>
    <DataTemplate x:Key="HeaderTemplate">
        <Grid
            x:Name="ExpanderHeaderGrid"
            Margin="0"
            Padding="0"
            HorizontalAlignment="Stretch"
            Background="Red"
            >
            <TextBlock x:Name="TextBlockLisSharedSettingsTitle" Text="{Binding}" />

        </Grid>
    </DataTemplate>
</UserControl.Resources>
<Grid>
    <uwpControls:Expander Header="hello" HeaderTemplate="{StaticResource HeaderTemplate}" />
</Grid>
...