我只是好奇,如果有人有關於如何使用WPF(請參閱Screeshot下面)在Windows 7資源管理器選項卡上按鈕下拉按鈕的想法。 下拉菜單選項卡在Windows 7中的按鈕
回答
我使用這個類,它看上去很不錯: http://andyonwpf.blogspot.com/2006/10/dropdownbuttons-in-wpf.html
我會在這裏發表所以它的清潔閱讀:
/// <summary>
/// Andy On WPF: DropDownButtons in WPF
/// http://andyonwpf.blogspot.com/2006/10/dropdownbuttons-in-wpf.html
/// </summary>
public class DropDownButton : ToggleButton
{
#region Members
public enum Placement { Bottom, Right }
#endregion
#region Properties
#region DropDownPlacement
/// <summary>
/// DropDown placement.
/// </summary>
public Placement DropDownPlacement
{
get { return (Placement)GetValue(DropDownPlacementProperty); }
set { SetValue(DropDownPlacementProperty, value); }
}
/// <summary>
/// DropDown placement (Dependency Property).
/// </summary>
public static readonly DependencyProperty DropDownPlacementProperty =
DependencyProperty.Register("DropDownPlacement", typeof(Placement),
typeof(DropDownButton), new UIPropertyMetadata(null));
#endregion
#region DropDown
/// <summary>
/// DropDown property.
/// </summary>
public ContextMenu DropDown
{
get { return (ContextMenu)GetValue(DropDownProperty); }
set { SetValue(DropDownProperty, value); }
}
/// <summary>
/// DropDown property (Dependency property).
/// </summary>
public static readonly DependencyProperty DropDownProperty =
DependencyProperty.Register("DropDown", typeof(ContextMenu),
typeof(DropDownButton), new PropertyMetadata(null, OnDropDownChanged));
#endregion
#endregion
#region Events
private static void OnDropDownChanged(DependencyObject sender,
DependencyPropertyChangedEventArgs e)
{
((DropDownButton)sender).OnDropDownChanged(e);
}
void OnDropDownChanged(DependencyPropertyChangedEventArgs e)
{
if (DropDown != null)
{
DropDown.PlacementTarget = this;
switch (DropDownPlacement)
{
default:
case Placement.Bottom:
DropDown.Placement = PlacementMode.Bottom;
break;
case Placement.Right:
DropDown.Placement = PlacementMode.Right;
break;
}
this.Checked +=
new RoutedEventHandler((a, b) => { DropDown.IsOpen = true; });
this.Unchecked +=
new RoutedEventHandler((a, b) => { DropDown.IsOpen = false; });
DropDown.Closed +=
new RoutedEventHandler((a, b) => { this.IsChecked = false; });
}
}
#endregion
}
它有一個自定義control template,似乎有一個透明的背景,除非在鼠標懸停,當然梯度和邊界也不同。
在MSDN上有一個自定義模板an example,這個模板導致了一個相當藍色的按鈕,基本上你可以對模板做任何事情,但是它們的創建可能還是一些工作。 Expression Blend可以有助於控制模板。
是的,我知道已經知道這是一個控制模板,但是你有什麼想法ControlElemets將在這裏使用:) –
它可能是各種控件,我認爲[默認模板](http ://stackoverflow.com/questions/1559261/control-template-for-existing-controls-in-wpf)的按鈕可能是一個很好的開始基本的外觀,但你可能想模板一個'菜單'和' MenuItem'因爲功能。如果你有一些想法如何創建一個包含狀態,PART等知識的模板,那麼你應該能夠重新創建這個模板,這不像你需要保持對Windows中使用的實際內部的真實性。 –
你有一個點在那裏:),以我自己的方式重新創建這個模板將滿足這個問題。但我仍然很好奇這裏的微軟人會使用什麼。無論如何感謝你+1 –
要獲得下拉菜單的部分內容,您可以設置按鈕的ContextMenu屬性,然後使用ContextMenu.Placement將其正確放置在按鈕下方。
您可能還必須設置ContextMenu.PlacementTarget以保持它相對於按鈕。
嗯..這也是一個好主意,也許路由事件可能有助於通過這種方法..謝謝+1給你 –
你可以實現按鈕的Click事件,讓菜單下拉點擊鼠標左鍵。 – JayP
我不知道這一點,它在概念上是一個菜單,按鈕是頂級菜單項,只是看起來有點不同,我不會彎曲按鈕來提供它不適用的功能。 –
對不起再次增加,但我只是意識到這種控制也存在在Codeplex上的擴展WPF工具包:
http://wpftoolkit.codeplex.com/wikipage?title=DropDownButton
它實現像這(根據他們的網站):
<extToolkit:DropDownButton Content="Click Me" Margin="15" >
<extToolkit:DropDownButton.DropDownContent>
<extToolkit:ColorCanvas />
</extToolkit:DropDownButton.DropDownContent>
</extToolkit:DropDownButton>
你可以在那裏根據需要添加MenuItems。
我已經使用這個工具包的其他功能(ChildWindow和SplitButton),我認爲它做得很好。隨着人們繼續在WPF中請求更多的Office 2007/2010功能,請繼續期待CodePlex和Microsoft更像這樣。
- 1. 在Android的ActionBar下拉下選項卡或下拉菜單
- 2. 在下拉菜單按鈕
- 3. 在windows phone 7中長按下拉菜單?
- 4. 下拉菜單按鈕
- 5. 如何讓按鈕下拉菜單打開以選擇選項?
- 6. 讓按鈕坐在下拉菜單中
- 7. 在jQuery中下拉菜單和按鈕
- 8. 按鈕中的下拉菜單值
- 9. Xpages下拉菜單中的按鈕
- 10. 將按鈕/下拉菜單更改爲選定的下拉菜單
- 11. 下拉選項卡與拆分按鈕下拉行爲
- 12. 基於下拉菜單選項啓用/禁用選項卡
- 13. 下拉菜單 - 多個選項卡打開一個選項
- 14. 菜單選項卡,下一步和後退按鈕進程
- 15. 在按鈕單擊時添加下拉菜單 - windows 8
- 16. 在下拉菜單中保存選項
- 17. 單擊鍵盤選項卡按鈕時顯示下拉列表
- 18. 如何在選擇js的下拉菜單中添加按鈕
- 19. 按下菜單按鈕時不會出現android選項菜單
- 20. PHP /如何使用Submit按鈕發佈下拉菜單選項
- 21. 基於選擇單選按鈕的下拉菜單
- 22. 在按鈕中顯示下拉選項
- 23. 從下拉菜單中選擇選項
- 24. CSS下拉菜單出現在第一個選項卡
- 25. ExtJs拆分按鈕菜單 - 在新選項卡中打開
- 26. jquery中的導航菜單下拉選項卡
- 27. jQuery的UI選項卡中添加下拉菜單
- 28. 從HTML中的下拉菜單訪問選項卡
- 29. 選項卡中的下一個按鈕
- 30. 下拉菜單中的限制選項
我認爲這是做這件事最體面的方法。謝謝 :) –