C# Windows 7中菜单选项卡上的下拉式按钮
我只是好奇,是否有人知道如何使用WPF在Windows7浏览器选项卡上使用下拉式按钮,请参见下面的Screeshot。 它有一个自定义,除非鼠标悬停,否则它的背景看起来是透明的,当然渐变和边框也不同 在MSDN上有一个定制的模板,它会产生一个蓝色的按钮,基本上你可以用这些模板做任何事情,但是它们的创建可能需要相当多的工作。Expression Blend有助于控件模板制作。它有一个自定义,除非鼠标悬停,否则它的背景看起来是透明的,当然渐变和边框也不同C# Windows 7中菜单选项卡上的下拉式按钮,c#,.net,wpf,xaml,wpf-controls,C#,.net,Wpf,Xaml,Wpf Controls,我只是好奇,是否有人知道如何使用WPF在Windows7浏览器选项卡上使用下拉式按钮,请参见下面的Screeshot。 它有一个自定义,除非鼠标悬停,否则它的背景看起来是透明的,当然渐变和边框也不同 在MSDN上有一个定制的模板,它会产生一个蓝色的按钮,基本上你可以用这些模板做任何事情,但是它们的创建可能需要相当多的工作。Expression Blend有助于控件模板制作。它有一个自定义,除非鼠标悬停,否则它的背景看起来是透明的,当然渐变和边框也不同 在MSDN上有一个定制的模板,它会产生一个蓝
在MSDN上有一个定制的模板,它会产生一个蓝色的按钮,基本上你可以用这些模板做任何事情,但是它们的创建可能需要相当多的工作。Expression Blend有助于控件模板化。要获取下拉菜单的菜单部分,可以设置按钮的ContextMenu属性,然后使用ContextMenu.Placement将其正确放置在按钮下方
您可能还必须设置ContextMenu.PlacementTarget以使其相对于按钮。要获取下拉菜单的菜单部分,您可以设置按钮的ContextMenu属性,然后使用ContextMenu.Placement将其正确定位在按钮下方
您可能还需要设置ContextMenu.PlacementTarget以使其与按钮保持相对位置。我使用这个类,它看起来很棒: 我将在此处发布,以便更清晰地阅读:
/// <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
}
我使用这个类,它看起来很棒: 我将在此处发布,以便更清晰地阅读:
/// <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
}
很抱歉再次添加,但我刚刚意识到此控件也存在于Codeplex上的扩展WPF工具包中: 它根据他们的站点执行如下操作:
<extToolkit:DropDownButton Content="Click Me" Margin="15" >
<extToolkit:DropDownButton.DropDownContent>
<extToolkit:ColorCanvas />
</extToolkit:DropDownButton.DropDownContent>
</extToolkit:DropDownButton>
您可以根据需要在其中添加菜单项
我已经将这个工具包用于ChildWindow和SplitButton的其他功能,我认为它做得很好。随着人们不断要求WPF提供更多Office 2007/2010功能,继续期待CodePlex和Microsoft提供更多类似的功能。很抱歉再次添加,但我刚刚意识到CodePlex上的扩展WPF工具包中也存在此控件: 它根据他们的站点执行如下操作:
<extToolkit:DropDownButton Content="Click Me" Margin="15" >
<extToolkit:DropDownButton.DropDownContent>
<extToolkit:ColorCanvas />
</extToolkit:DropDownButton.DropDownContent>
</extToolkit:DropDownButton>
您可以根据需要在其中添加菜单项
我已经将这个工具包用于ChildWindow和SplitButton的其他功能,我认为它做得很好。随着人们不断要求WPF提供更多的Office 2007/2010功能,继续期待CodePlex和Microsoft提供更多类似的功能。是的,我知道这是一个控件模板,但您知道这里将使用哪些控件吗:它可以是各种控件,我认为按钮的使用可能是基本外观的一个良好开端,但由于功能性的原因,您可能希望模板化菜单和菜单项。如果您知道如何创建一个模板,其中包括状态、部件等方面的知识。您应该能够重新创建该模板,但您并不需要忠实于Windows中使用的实际内部结构。您有一个观点:,以我自己的方式重新创建此模板可以解决此问题。但我仍然很好奇微软的人在这里用了什么。无论如何,谢谢你+1是的,我知道这是一个控件模板,但是你知道这里将使用什么样的控件吗:它可以是各种各样的控件,我认为按钮的使用可能是基本外观的一个很好的开始,但你可能想模板菜单和菜单项,因为功能。如果您知道如何创建一个模板,其中包括状态、部件等方面的知识。您应该能够重新创建该模板,但您并不需要忠实于Windows中使用的实际内部结构。您有一个观点:,以我自己的方式重新创建此模板可以解决此问题。但我仍然很好奇微软的人在这里用了什么。无论如何,谢谢你。。这也是一个好主意,也许路由事件可以通过此方法提供帮助。。感谢+1您您可以实现按钮的单击事件,让菜单在鼠标左键单击时下拉。我不知道这是一个概念上的菜单,按钮是顶级菜单,只是看起来有点不同,我不会弯曲按钮来提供它不适用的功能。嗯。。这也是一个好主意,也许路由事件可以通过此方法提供帮助。。感谢+1您您可以实现按钮的单击事件,让菜单在鼠标左键单击时下拉。我不知道这是什么,它在概念上是一个菜单,按钮是顶级菜单,只是看起来有点不同,我不会弯曲一个按钮来提供一个不适合它的功能。我认为这是最体面的方式来做到这一点。谢谢:我认为这是最体面的方式。谢谢: