【问题标题】:Attached property declaration in xamlxaml 中的附加属性声明
【发布时间】:2010-10-15 12:23:28
【问题描述】:

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

这是行不通的。文本块为空。

我正在改变

&lt;TextBlock Text="{Binding Description}"&gt;&lt;/TextBlock&gt;

&lt;TextBlock Text="{Binding }"&gt;&lt;/TextBlock&gt;

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

为什么绑定错误?

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

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

【问题讨论】:

    标签: wpf attached-properties


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 2022-01-17
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多