Прикрепленное объявление свойства в xaml - PullRequest
0 голосов
/ 15 октября 2010

Я создаю прикрепленное свойство.Мой прикрепленный класс helper:FocusDetail и имеет 2 свойства.вторым свойством DetailBody тип является объект.Я использую это свойство для элементов управления

<ItemsControl ItemsSource="{Binding Riches}" BorderThickness="0">
   <ItemsControl.ItemTemplate>
      <DataTemplate>
         <TextBox Text="{Binding TextInfo}"
             helper:FocusDetail.DetailTitle="{StaticResource strTitle}"
             helper:FocusDetail.DetailBody="{Binding Description}"
             />
     </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

Это успешно работает

Я изменяю прикрепленное значение следующим образом

<DataTemplate>
   <TextBox Text="{Binding TextInfo}"
         helper:FocusDetail.DetailTitle="{StaticResource strTitle}">
       <helper:FocusDetail.DetailBody>
           <Binding Path="Description"/>
       </helper:FocusDetail.DetailBody>
   </TextBox>  
</DataTemplate>

Это работа, которую я 'м снова меняется

<DataTemplate>
   <TextBox Text="{Binding TextInfo}"
         helper:FocusDetail.DetailTitle="{StaticResource strTitle}"
         >
         <helper:FocusDetail.DetailBody>
            <TextBlock Text="Some static text"></TextBlock>
         </helper:FocusDetail.DetailBody>
   </TextBox>  

Это работает.Мое последнее изменение здесь

<DataTemplate>
   <TextBox Text="{Binding TextInfo}"
         helper:FocusDetail.DetailTitle="{StaticResource strTitle}">
        <helper:FocusDetail.DetailBody>
           <TextBlock Text="{Binding Description}"></TextBlock>
        </helper:FocusDetail.DetailBody>
   </TextBox>  
</DataTemplate>

Это не работа.Текстовый блок пуст.

Я меняю

<TextBlock Text="{Binding Description}"></TextBlock> на

<TextBlock Text="{Binding }"></TextBlock>.

Но текстовый блок возвращает тип окна DataContext.Уже выйти из итерации Itemscontrol.

Почему работает неправильная привязка?

Как объявить присоединенное свойство как последний код?

Мне нужно, чтобы присоединенное свойство содержало элементы управления визуальным деревом.

1 Ответ

1 голос
/ 15 октября 2010

Ваше связывание разрывается, поскольку оно зависит от унаследованного DataContext, но извлекается из структуры наследования FrameworkElement DataContext путем присвоения свойству (не-Content).

Из того, что вы пытаетесь сделать, лучше всего было бы вместо этого использовать DataTemplate для определения ваших элементов пользовательского интерфейса (здесь TextBlock) и иметь отдельное свойство для самих данных, которое затем можно применить к шаблон с ContentControl или ContentPresenter в той точке дерева, где вы ожидаете, что визуальные эффекты будут отображаться (я предполагаю, что это вызывает какую-то подсказку / всплывающее окно).

     <TextBox Text="{Binding TextInfo}"
         helper:FocusDetail.DetailTitle="{StaticResource strTitle}"
         helper:FocusDetail.DetailBody="{Binding}"
         >
         <helper:FocusDetail.DetailBodyTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Description}"></TextBlock>
            </DataTemplate>
         </helper:FocusDetail.DetailBodyTemplate>
     </TextBox>
...