2011-08-26 97 views
3

我有一個數據錄入應用程序,其中包括用於錄製註釋的文本框。這些註釋是特定於正在輸入的數據的,並且通常是多餘的(對一系列數據記錄給出相同的評論)。帶有靜態和可編輯文本的WPF文本框?

我打算添加一個組合框,並帶有一個罐裝評論選項來覆蓋最常見的情況。從組合框中選擇一個時,註釋文本框將填充註釋。

但是,我還需要能夠在文本框內的固定消息之後輸入其他註釋。但我不希望它能夠改變罐頭消息。所有輸入的評論需要在罐頭評論之後提交。

有沒有辦法將靜態文本應用於無法更改的文本框,但仍然允許在其下方輸入文本?

我到目前爲止唯一的想法是抓住TextInput事件並不斷用覆蓋消息覆蓋文本框內容的開始,但結果並不會很漂亮。

+0

一個WPF文本框中沒有內置該功能,正如你指出的那樣,會採取複雜的事件處理程序來使其工作。 您可以在文本框上方顯示另一個文本字段以顯示預設結果(只讀)和允許可編輯評論的文本框?如果是這樣,您可以將您發送到數據庫/服務/任何內容的最終值中的兩個字段連接起來。 – EtherDragon

+0

這更多的是視覺挑戰。註釋框不是很大,因此,註釋和註釋的組合可能導致滾動。如果罐裝響應始終可見,則用於輸入評論的可用空間可能非常小。 – Nairou

回答

2

或許覆蓋一個TextBox模板,以便它包含Panel與套用消息ComboBox和常規TextBox用戶輸入。

樣式內部TextBox所以它沒有正常的文本框邊框,並且樣式ComboBox,以便當它沒有焦點時它不顯示它的邊界。

當組合框具有焦點,它看起來像一個TextBox內的組合框,如果它不具有焦點將只是看起來像一個大的文本框

+0

我的最終解決方案最終與此類似(並受此啓發)。我去了一個ScrollViewer,並在其中放置了一個TextBlock和TextBox,一個在另一個之上。 ScrollViewer允許兩者一起滾動,就像是同一個TextBox的一部分一樣。 – Nairou

3

您可以將一個禁用的TextBox放置在可編輯的TextBox的正上方,並分別移除它們的底部和頂部邊框,以使它們看起來像一個大的TextBox

0

我認爲你可以將綁定在textBox1.Text與組合框選定項目爲單向模式。以下是代碼snipet

<ComboBox Height="23" HorizontalAlignment="Left" Margin="118,48,0,0" Name="comboBox1" VerticalAlignment="Top" Width="144"> 
      <ComboBoxItem Content="Commanet 1" /> 
      <ComboBoxItem Content="Comment 2" /> 
</ComboBox> 
<TextBox Height="64" HorizontalAlignment="Left" Margin="118,101,0,0" Name="textBox1" VerticalAlignment="Top" Width="144" Text="{Binding ElementName=comboBox1, Path=SelectedItem.Content, Mode=OneWay}" /> 
0

不,我意識到,你不能有這樣的事情。但是,您可以:

  1. 對頂(側)將其與應用
  2. 如果你有足夠的空間,有一個readonlt文本框註釋的預覽,或多或少像這樣註釋的靜態文本標籤編輯作品。
  3. 你可以試着不讓刪除從綁定的數據中的字符數計(這將是真正靜態文本)

希望這有助於。

0

我會採取稍微不同的策略。

如果在組合框中選擇了某些內容,則將所選組合框項目文本和文本框文本中的輸入連接起來。如果沒有,請使用文本框文本。

當然,您可以使用組合框的選定事件來標記標籤以反映環境中的變化。

0

2個其他選項。

  1. 覆蓋文本框的樣式,包括固定文本 - 通雖然有些templatebinding固定文本
  2. 您可以捕獲文本框中PreviewKey <>事件,並取消其修改「固定」的文字,如果不讓事件通過。

但2文本框是視覺外觀爲1仍然是一個更好的選擇,但 - 最容易實現和維護