WPF中 ContextMenu和ToolTip等问题

大海啊全是水 2010-02-04 10:02:49
1.我想设ContextMenu第二级菜单的背景 该怎么弄啊
<ContextMenu x:Key="MyMenu" Background="#FF0000">
<MenuItem Header="MenuItem1">
<MenuItem Header="MenuItem11"/>
<MenuItem Header="MenuItem12"/>
</MenuItem>
</ContextMenu>

就是MenuItem11和MenuItem12整体的背景
2.我想要的ToolTip是可以在上面放个Button之类的,然后可以去点击它.现在的问题是ToolTip出来以后
鼠标出相关的控件,ToolTip就回消失了,没办法点击到ToolTip.我想知道ToolTip能做到我想要的效果吗?
...全文
595 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
大海啊全是水 2010-02-04
  • 打赏
  • 举报
回复
谢谢大家哈,但是我想要的是对ContextMenu改变背景,而不是对MenuItem,因为我要ContextMenu的背景用渐变的画刷,或者其他的画刷来,也可以对他加个背景图之类的.
ToolTip在上面给他加Button这些很简单,但是只能显示出这个Button,对他点击根本不起作用.我想ToolTip应该只能做来显示,对他的内容操作不了.
后来我用一个Board来代替ToolTip,但是问题又来了,ToolTip可以出现在你窗口外面,而Board这些是不可能的.
我会去看看Popup的.
谢谢大家啊,等结帖的时候,我把分再加100吧
RexZheng 2010-02-04
  • 打赏
  • 举报
回复
2. 使用 Popup 代替 ToolTip
RexZheng 2010-02-04
  • 打赏
  • 举报
回复
<ContextMenu Background="#FF0000">
<ContextMenu.Resources>
<Style TargetType="MenuItem">
<Setter Property="Background"
Value="{Binding Background,RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
</Style>
</ContextMenu.Resources>
<MenuItem Header="MenuItem1">
<MenuItem Header="MenuItem11"/>
<MenuItem Header="MenuItem12"/>
</MenuItem>
</ContextMenu>
JavaK 2010-02-04
  • 打赏
  • 举报
回复
1. MenuItem11的backgroup color你直接设 Background="Blue"就可以了
2. 你可以给你的tooltip做一个style(放到你的<Window.Resources>或是App.Resources里面):
<Style x:Key="{x:Type ToolTip}" TargetType="ToolTip">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="HasDropShadow" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToolTip">
<Button>
<ContentPresenter/>
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
大海啊全是水 2010-02-04
  • 打赏
  • 举报
回复
刚才试了下 觉得ToolTip做不出来这样来的效果
平生我自如 2010-02-04
  • 打赏
  • 举报
回复
帮顶
大海啊全是水 2010-02-04
  • 打赏
  • 举报
回复
恩 刚看到ContextMenu那个也帮我弄拉 真谢谢拉 呵呵 结了
大海啊全是水 2010-02-04
  • 打赏
  • 举报
回复
那个位置不对是因为设置了ListViewItem的风格,他的区域没有去设置,结果ListViewItem的宽度比ListView的宽的要大一点.开始没注意,因为我把水平的Scrollbar给隐藏了.

设置Placement为Left有可能显示的时候会跑到Right,同样设置Right,Top,Bottom也应该一样.
大概就差不多了吧,呵呵,谢谢了哈
RexZheng 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tianhaoma8888 的回复:]
我试了下StaysOpen, 不能达到我想要的效果,我还是自由自己去处理一下.
现在这个popup还有个问题就是 最开始出现的位置 有时候不对. 还知道为什么,困惑中...
[/Quote]

设置 PlacementTarget 和 Placement 属性
大海啊全是水 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 0009 的回复:]
当 popup 的 StaysOpen 为 false  时(默认),它在失去焦点后是能够自动关闭的,不建议你自己去处理它的行为。
[/Quote]
我试了下StaysOpen, 不能达到我想要的效果,我还是自由自己去处理一下.
现在这个popup还有个问题就是 最开始出现的位置 有时候不对. 还知道为什么,困惑中...
RexZheng 2010-02-04
  • 打赏
  • 举报
回复
当 popup 的 StaysOpen 为 false 时(默认),它在失去焦点后是能够自动关闭的,不建议你自己去处理它的行为。
RexZheng 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tianhaoma8888 的回复:]
ToolTip在上面给他加Button这些很简单,但是只能显示出这个Button,对他点击根本不起作用.我想ToolTip应该只能做来显示,对他的内容操作不了.
后来我用一个Board来代替ToolTip,但是问题又来了,ToolTip可以出现在你窗口外面,而Board这些是不可能的.
我会去看看Popup的.
[/Quote]

就用 Popup,没错的,就算单纯从命名上你也应该要能分辨出 Popup 和 ToolTip 的区别来了。
大海啊全是水 2010-02-04
  • 打赏
  • 举报
回复
ToolTip的问题基本上搞定了 用Popup
在资源里面定义一个Popup,然后在代码获取到它的对象.

public Popup mypopup;
mypopup = (Popup)FindResource("myPopup");

当输入移进listviewitem的时候 设置他的placementtarget和placement 然后在open他
private void ListViewItem_MouseEnter(object sender, MouseEventArgs e)
{
mypopup.PlacementTarget = (UIElement)sender;
mypopup.Placement = PlacementMode.Left;
mypopup.IsOpen = true;
}
当鼠标移出去的时候,先检查下是否应该显示
private void ListViewItem_MouseLeave(object sender, MouseEventArgs e)
{
Point pt = e.GetPosition((UIElement)sender);
if (pt.X > 0) mypopup.IsOpen = false;
}
最后在Popup加个MouseLeave,不显示他.
private void Popup_MouseLeave(object sender, MouseEventArgs e)
{
mypopup.IsOpen = false;
}
这样做还是有个些的问题,
1,有时候Popup显示的位置不太正确,大多数是在调试的时候位置不正确.
2,ListViewItem_MouseEnter和Popup_MouseLeave该优化一下,不一定ListViewItem_MouseEnter的时候就要去显示,也不一定Popup_MouseLeave就要不显示.但是问题不大...
谢谢大家咯哈,特别是0009

剩下的问题 怎么去更改 ContextMenu的子级菜单背景了,不是MenuItem的背景.
RexZheng 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tianhaoma8888 的回复:]
谢谢大家哈,但是我想要的是对ContextMenu改变背景,而不是对MenuItem,因为我要ContextMenu的背景用渐变的画刷,或者其他的画刷来,也可以对他加个背景图之类的.
[/Quote]

设置 ItemsPanel

<ContextMenu>
<ContextMenu.Resources>
<Style TargetType="MenuItem">
<Setter Property="ItemsPanel" Value="{Binding ItemsPanel,RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
</Style>
</ContextMenu.Resources>
<ContextMenu.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel>
<StackPanel.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="AntiqueWhite" Offset="0" />
<GradientStop Color="Chocolate" Offset="1" />
</LinearGradientBrush>
</StackPanel.Background>
</StackPanel>
</ItemsPanelTemplate>
</ContextMenu.ItemsPanel>
<MenuItem Header="MenuItem1">
<MenuItem Header="MenuItem11"/>
<MenuItem Header="MenuItem12"/>
<MenuItem Header="MenuItem11"/>
<MenuItem Header="MenuItem12"/>
<MenuItem Header="MenuItem11"/>
<MenuItem Header="MenuItem12"/>
<MenuItem Header="MenuItem11"/>
<MenuItem Header="MenuItem12"/>
</MenuItem>
<MenuItem Header="MenuItem1">
<MenuItem Header="MenuItem11"/>
<MenuItem Header="MenuItem12"/>
</MenuItem>
<MenuItem Header="MenuItem1">
<MenuItem Header="MenuItem11"/>
<MenuItem Header="MenuItem12"/>
<MenuItem Header="MenuItem11"/>
<MenuItem Header="MenuItem12"/>
</MenuItem>
</ContextMenu>

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧