2013-05-22 56 views
2

我想restyle一個WPF組合框被格式化爲下拉列表類型,但刪除選定的文本框,其中填充選定的內容只需用一些靜態文本和一個保持不變的圖像替換它,模擬一個像外觀一樣的按鈕。WPF - 如何restyle組合框刪除文本框/編輯框並替換爲靜態文本

所以實際上它變成了一個按鈕下拉列表,所以當我從下拉列表中選擇一個項目時,我可以通過命令綁定來填充另一個控件,其中的選定值和按鈕樣式依然存在。

基本上就是這樣的原始圖片,我一起入侵。

button drop-list

我已經看到了上下文菜單按鈕的例子,但我不喜歡這個主意,和一個ComboBox完全符合我的需求的功能和方便的命令和數據綁定條款。

我知道它可以做到,但是在閱讀了基於其他控件的過分混淆的例子之後,我對自己的能力喪失了信心。我無法找到詳細說明我需要學習的示例。

乾杯 DIGGIDY

回答

0

經過大量的研究後,我決定更好的選擇是去一個帶有綁定上下文菜單的按鈕,這最終成爲更好的解決方案。

感謝您的幫助Marc。

+0

它不是很好嗎?您是否嘗試使用ComboBox上方的只讀編輯框?結果看起來完全像你的例子。太糟糕了,不符合你的期望。我很高興你的上下文菜單包圍了! – Marc

+0

我發現組合不適合我的整體外觀,但感謝您的幫助,因爲我將更有可能使用我在這裏學到的東西。 – DIGGIDY

0

我已經得到了同樣的問題,其實,這很簡單。 只需將一個只讀組合框與一個SelectionChanged事件放在一起即可。 你在索引0中輸入你的靜態文本。

現在,當用戶選擇某物時,獲取選定的項目,然後將SelectedIndex設置爲0.因此,您獲得了用戶選擇的項目,但顯示的文本是相同的。

請參見:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ComboBox combo = (ComboBox)sender; 
    if (combo.SelectedIndex > 0) 
    { 
     // Do your stuff here... 

     // Then 
     combo.SelectedIndex = 0; 
    } 
} 
+0

感謝您的快速反應。幾乎在那裏,但這意味着索引0也包含在下拉列表中,是否有一種方法可以在不添加到列表中的情況下進行操作? – DIGGIDY

+0

是的,它包括但如果你選擇它,什麼都不會發生。作爲取消選項。目前我沒有看到任何其他答案,但我仍在考慮這個問題。 – Marc

+0

我想我可以通過xmal數據觸發器來改變它的可見性,我正在玩wpf/xaml的相當有限的知識,看看我是否也可以做到這一點,然後我將有一個可行的解決方案 – DIGGIDY

0

[編輯]據對我來說,我更喜歡我以前的答案。所以請確保你,讀者,我以前的答案不符合你的期望。

另一個答案是把你的對象放在ComboBox上面,然後從這個對象上捕獲MouseDown事件並且放下ComboBox。在我的例子中,我使用了只讀文本框。

參見:

<Grid> 
    <ComboBox x:Name="Combo" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="120"> 
     <ComboBoxItem Content="TEST" /> 
     <ComboBoxItem Content="TEST1" /> 
     <ComboBoxItem Content="TEST2" /> 
     <ComboBoxItem Content="TEST3" /> 
    </ComboBox> 
    <TextBox HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" Text="TextBox" VerticalAlignment="Top" Width="120" IsReadOnly="True" PreviewMouseDown="TextBox_PreviewMouseDown"/> 
</Grid> 

然後後面的代碼:

private void TextBox_PreviewMouseDown(object sender, MouseButtonEventArgs e) 
{ 
    e.Handled = true; // Prevents the event. 
    Combo.IsDropDownOpen = true; // Drops down the ComboBox. 
} 

它工作正常的我。

+0

我是用Microsoft Visual Studio Designer做的,所以確保這兩個組件完全在同一座位上。 – Marc