2012-10-23 81 views
0

我想創建一個控件,讓我選擇單位作爲文本框中的值。爲了實現這一點,我在文本框後面附加了一個按鈕,並在包含可用單元的ListBox的懸停上打開了一個彈出窗口。與WPF彈出菜單中的列表框的交互不起作用

如果我在這個彈出窗口中放置一個按鈕,所有工作正常,我會得到一個懸停效果,並且可以點擊按鈕。但是ListBox不能按預期工作。做什麼都不特別,我不能點擊或集中列表框項目。將FocusManager.IsFocusScope設置爲true可讓我通過雙擊選擇一個項目,首先將焦點放在窗口上,其次將焦點放在我想的ListBox上。以編程方式移動焦點也沒有幫助。

樣品彈出窗口:

<Popup x:Name="PART_UnitPopup" 
    PlacementTarget="{Binding}" 
    Placement="Bottom"> 
    <StackPanel> 
    <ListBox x:Name="PART_UnitPopupListBox" ItemsSource="{Binding,Path=Units}"/> 
    <Button Content="Click me!" /> 
    </StackPanel> 
</Popup> 

看了一些東西,並試圖在彈出的打開或焦點事件焦點移動了一些解決方案,但沒有得到這個工作的普通樣式的行爲像按鈕的功能。也許除popop之外還有另一種方法來完成這項任務,但它是一個很好的解決方案,我發現了一堆據說可以工作的代碼,並沒有多大區別。

+0

聽起來很複雜。爲什麼不簡單地使用組合框來選擇單位,而不是使用彈出式按鈕。 – Clemens

+0

它的設計和可用性要求如此風格(小的簡單按鈕和彈出行爲)。也想到手動使用窗口,但定位可能是在冒犯。 –

回答

0

我發現了一個遠離真實解決方案的解決方法,但我想分享它。 因爲按鈕接縫工作正常,我把按鈕放入ListBox`項目模板,並改變了樣式,使它們看起來像扁平物體。現在懸停和互動的作品無需點擊兩次。

作爲一個陷阱我不再能夠依靠選擇更改事件,因爲按鈕攔截所有點擊。所以我給這些按鈕添加了一個命令,可以完成與之前更改過的處理程序相同的工作。這基本上完成了工作,但其他想法將不勝感激。