2011-08-19 113 views
3

雙擊我在WPF中的按鈕來更改按鈕的內容(文字),我想改變,當我雙擊它的文字,這是我想要的光標出現,然後鍵入要顯示爲內容的文本(與在桌面快捷方式上按F2時的行爲類似)。WPF:如何在運行時

我想我可以檢測到雙擊,然後顯示一個帶有透明背景的文本框,這將使我獲得遊標,在這個新的文本框中鍵入文本,將其設置爲按鈕內容並刪除文本框,但是似乎不是正確的做法。


我想我腦子裏想的是我正在開發一個使用形狀的圖表工具。由於形狀不是從ContentControl派生的,因此我無法在其中放置文本框,並且我想模擬此行爲。我正在考慮製作一個自定義控件,但是對於這個可能太多了,我還不太瞭解這個主題。我想另一種方法是使用裝飾器(也許是邊框),因爲它是從contentcontrol派生出來的,所以我可以像喬所建議的那樣做同樣的事情。有任何想法嗎?

我可以做的另一件事是將形狀放在一個網格中,然後將文本框放在形狀的頂部,但我不確定這將如何作爲設計原則,而且我也不知道命中測試只會在形狀或網格上。

回答

1

由於這是WPF中,你可以把一個TextBox你的按鈕內,沒有麻煩。如果您不希望文本框具有邊框和白色背景 - 也就是說,如果您希望它看起來像只是直接在按鈕中輸入 - 那麼可以通過將邊框寬度設置爲0並將背景設置爲背景來移除它們透明。

你可能想要做的是讓你的Button的內容是一個既包含普通內容(可能是TextBlock)又包含文本框的網格,並且最初隱藏文本框(V​​isibility = Collapsed)。然後,當您獲得雙擊事件時,您將隱藏TextBlock並顯示TextBox。

<Button> 
    <Grid> 
     <TextBlock Name="buttonText">Double-click to rename me</TextBlock> 
     <TextBox Name="buttonEdit" Visibility="Collapsed" MinWidth="100"/> 
    </Grid> 
</Button> 
+0

感謝喬。我想我心裏想的是,我正在開發一種使用形狀的圖表工具。由於形狀不是從ContentControl派生的,因此我無法在其中放置文本框,並且我想模擬此行爲。我正在考慮製作一個自定義控件,但是對於這個可能太多了,我還不太瞭解這個主題。我想另一種方法是使用裝飾器(也許是邊框),並且由於它是從contentcontrol派生出來的,所以我可以用按鈕來做同樣的事情。有任何想法嗎? – mihajlv

+0

最簡單的方法是爲每個形狀製作一個UserControl,並且UserControl將在其上具有一個形狀和一個(有時隱藏的)文本框。 UserControl是重量級的,所以如果你有成百上千個這樣的話,就不會很好地擴展,但它是一個簡單的入門方法。但取決於TextBox的大小,顯示它可能會導致您的UserControl調整大小。或者,您可以將文本框放入裝飾器中 - 然後您每次只能使用一個文本框。我從來沒有真正使用裝飾,所以我無法幫助。 –

+0

好的,謝謝。 – mihajlv

相關問題