0

我正在创建附加属性。我的附属班级是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>.

但是 textblock 返回 Window DataContext 类型。已经退出 Itemscontrol 迭代。

为什么绑定错误工作?

如何像最后一个代码一样声明附加属性?

我需要附加属性包含可视树控件。

4

1 回答 1

1

您的 Binding 正在中断,因为它依赖于继承的 DataContext 但通过分配给(非内容)属性而从 FrameworkElement DataContext 继承结构中取出。

从看起来你正在尝试做的最好的解决方案可能是改为使用 DataTemplate 来定义你的 UI 元素(这里的 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>
于 2010-10-15T14:59:24.037 回答