2015-02-09 84 views
0

所以,我有這個窗口。在它上面,我創建了一個TextBlocks和TextBoxes成對的列表。當你點擊任何一個時,他們會在相應的文本框中輸入一個數字,並在後臺設置一些值。這一切現在運作良好。WPF模板綁定超過1內容

我有以下XAML來創建自定義複選框(因爲它有我想用於此目的的行爲)。我的問題是我想將不同的內容綁定到TextBlock和TextBox中。對於TextBlock,我綁定了Content屬性,但我無法找到合適的選項來滿足第二個綁定。我考慮將它放在標籤中,但這並不正確,無論如何,我已經將我需要的索引值綁定到那裏。

<Style x:Key="CustomCHK" TargetType="{x:Type CheckBox}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type CheckBox}"> 
        <DockPanel LastChildFill="True"> 
         <TextBox DockPanel.Dock="Right" Width="50" Height="30" /> 
         <TextBlock Text="{TemplateBinding Content}" TextWrapping="Wrap" /> 
        </DockPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

覺得應該有一個簡單的解決方案,但我只是想確定什麼是最好的。我是否創建自定義複選框類並添加一些屬性?

一如既往,我感謝您可以爲我提供的任何方向。

+1

你想綁定到文本框的第二個值是什麼?這是用戶輸入嗎?但假設文本框是用戶輸入的,我認爲對於您的情況,爲複選框添加自定義控件並向其添加新屬性會更合適。 – 2015-02-09 15:36:43

+1

@ Sypher_04你看起來更像是'UserControl'或自定義控件,你可以在其中創建自己的依賴項屬性。或者,如果你仍然想使用「複選框」,你可以創建附加屬性 – dkozl 2015-02-09 15:43:36

+0

有點我在想什麼。基本上我有一個收集所有用戶輸入的背景對象。最初,所有的文本框都是空白的。綁定到空字符串值。一旦接收到輸入,如果用戶回到這個屏幕,他們的輸入將通過背景對象上的綁定重新加載到屏幕上。 – 2015-02-09 15:44:50

回答

0

不幸的是,沒有直接的方法來做到這一點。我可以看到只有兩個(有點瑕疵)的變通辦法:

  • 子類CheckBox滿足您的需求,並添加你需要的額外的內容屬性。好處是,這將完全支持IDE的編程幫助設置內容屬性,並且這些屬性將是類型安全的。缺點是您的需要添加C#代碼,目的是聲明額外的內容屬性(即不添加任何「行爲邏輯」),這似乎與純粹的「XAML」衝突僅用於演示方法。
  • 您可以嘗試將數組傳遞到Content property,然後將多個ContentPresenter實例放置在控件模板中,每個實例都綁定到數組中的另一個項目。 Binding property paths should support indexed access,雖然您的代碼可能會變得有點冗長,因爲XAML中的數組必須通過使用x:Array markup extension明確書寫。