2017-02-23 111 views
2

在我的項目中,我有一個自定義控件,它是一個擴展器。按鈕的內容會使控件展開或摺疊,這取決於狀態。我得到了大部分工作,但是我無法將文本綁定到我用於該按鈕的內容。無法將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工作了一段時間,但是數據綁定(到正確的源碼)對我來說仍然是一個謎。大部分時間我都會以某種方式工作,但如果失敗了,我不知道該怎麼做。我搜索了幾個小時,嘗試了各種各樣的東西,但沒有爲我工作。

任何幫助表示讚賞。

回答

1

你可以綁定到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://stackoverflow.com/questions/19244111/what-is-the-difference-between-xreference-and-elementname – mm8

相關問題