无法将WPF TextBlock绑定到属性

问题描述:

在我的项目中,我有一个自定义控件,它是一个扩展器。按钮的内容会使控件展开或折叠,这取决于状态。我得到了大部分工作,但是我无法将文本绑定到我用于该按钮的内容。无法将WPF TextBlock绑定到属性

这里是我的XAML的代码从Generic.xaml:

<ControlTemplate x:Key="PndExpanderControlVertical" TargetType="{x:Type local:PndExpanderControl}"> 
    <Border Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="Auto" /> 
      </Grid.ColumnDefinitions> 

      <dx:DXExpander x:Name="expander" Grid.Column="0" FlowDirection="LeftToRight" VerticalExpand="None" HorizontalExpand="FromLeftToRight" IsExpanded="True"> 
       <dxlc:GroupBox x:Name="group_box" Padding="0" Header="Header"/> 
      </dx:DXExpander> 

      <Button Grid.Column="1" Padding="1" x:Name="expand_button"> 
       <Button.Style> 
        <Style TargetType="Button"> 
         <Style.Triggers> 
          <!-- Button-Style, expanded --> 
          <DataTrigger Binding="{Binding IsExpanded, ElementName=expander}" Value="True"> 
           <Setter Property="Content" Value="↧ ↧"/> 
           <Setter Property="LayoutTransform"> 
            <Setter.Value> 
             <RotateTransform Angle="90"/> 
            </Setter.Value> 
           </Setter> 
          </DataTrigger> 
          <!-- Button-Style, collapsed --> 
          <DataTrigger Binding="{Binding IsExpanded, ElementName=expander}" Value="False"> 
           <Setter Property="Content"> 
            <Setter.Value> 
             <TextBlock> 
              <TextBlock Text="↥ "/> 
              <TextBlock Text="{Binding Header, ElementName=group_box}"/> 
              <TextBlock Text=" ↥"/> 
             </TextBlock> 
            </Setter.Value> 
           </Setter> 
           <Setter Property="LayoutTransform"> 
            <Setter.Value> 
             <RotateTransform Angle="90"/> 
            </Setter.Value> 
           </Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </Button.Style> 
      </Button> 
     </Grid> 
    </Border> 
</ControlTemplate> 

正如你可以看到我使用嵌套文本块到group_box的头球一些箭头组合。但是,中间文本块的绑定不起作用。

说实话,我现在用WPF工作了一段时间,但是数据绑定(到正确的源码)对我来说仍然是一个谜。大部分时间我都会以某种方式工作,但如果失败了,我不知道该怎么做。我搜索了几个小时,尝试了各种各样的东西,但没有为我工作。

任何帮助表示赞赏。

你可以绑定到ExpanderContentHeader

<TextBlock Text="↥ "/> 
<TextBlock Text="{Binding Content.Header, ElementName=expander}"/> 
<TextBlock Text=" ↥"/> 

不能使用ElementName,因为它不是在同一个名字的范围为Button直接绑定到GroupBox

编辑:

好吧,这只有在扩展默认处于折叠状态的作品。

但是你可以使用一个x:Reference绑定到GroupBox

<TextBlock Text="↥ "/> 
<TextBlock Text="{Binding Header, Source={x:Reference group_box}}"/> 
<TextBlock Text=" ↥"/> 
+0

可惜,这是行不通的。输出说:“System.Windows.Data错误:4:找不到与引用绑定的源'ElementName = expander'。BindingExpression:Path = Content.Header; DataItem = null;目标元素为'TextBlock'(Name ='');目标属性是'文本'(类型'字符串')“ – Takiro

+0

谢谢,这完美的作品。你能解释为什么必须使用x:Reference吗?从我在快速搜索中找到的ElementName和x:Reference的工作基本相同。 MSDN也表示:“对于大多数WPF应用程序和场景,仍应使用ElementName绑定。” – Takiro

+0

有关ElementName和x之间区别的信息,请参阅以下问题:参考:http://*.com/questions/19244111/what-is-the-difference-between-xreference-and-elementname – mm8