关于WPF中popup的一个问题
wpf吧
全部回复
仅看楼主
level 5
nolesun 楼主
利用popup绑定到一个按钮上,当点击按钮时,弹出界面。并把stayopen设置为false,这样点击界面以外其他区域时界面消失,但这样再点击按钮时,界面还仍为展现,如何设置使点击按钮时,可以使展现的界面消失。
2014年09月21日 13点09分 1
level 8
别用button了、button的click事件在popup的关闭事件之后触发、没办法在click事件中判断popup关闭是因为点了别的地方自动关闭的 还是点了button上自动关闭的。
可以放一个图片在那里。我之前也遇到过这个问题要解决。我不知道你需不需要在popup弹出和关闭时。那个按钮的显示状态需不需要改变,比如我当时需要做的就是popup关闭时,按钮是一个向下的箭头、打开时是一个向上的箭头(类似于QQ登陆窗口,账号输入框)。
我是用那个图片的mousedown mouseup 还有popup的关闭事件 三个事件去处理的。
bool IsUnchenked = false; //鼠标是否在下拉框没有弹出的时候按下
bool IsClick = false; //鼠标是否按下
bool IsShowAccountList_Closed = true; //下拉框是否关闭
int AccountInfoListSelectedIndex = 0;
/// <summary>
/// 下拉框关闭触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ShowAccountList_Closed(object sender, EventArgs e)
{
Pulldown.Visibility = System.Windows.Visibility.Visible;
Pullup.Visibility = System.Windows.Visibility.Hidden;
IsShowAccountList_Closed = true;
}
/// <summary>
/// 下拉框弹出按钮被按下
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Pull_MouseDown(object sender, MouseButtonEventArgs e)
{
IsClick = true;
if (IsShowAccountList_Closed)
{
IsUnchenked = true;
}
}
/// <summary>
/// 下拉框按钮上响应鼠标Up事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
{
if (IsUnchenked)
{
IsUnchenked = false;
IsShowAccountList_Closed = false;
Pulldown.Visibility = System.Windows.Visibility.Hidden;
Pullup.Visibility = System.Windows.Visibility.Visible;
ShowAccountList.IsOpen = true;
if (AccountInfoListSelectedIndex > -1 && AccountInfoListSelectedIndex < AccountInfoList.Items.Count)
{
AccountInfoList.SelectedIndex = AccountInfoListSelectedIndex;
}
}
}
2014年09月22日 07点09分 2
请问最后if (AccountInfoListSelectedIndex > -1 && AccountInfoListSelectedIndex < AccountInfoList.Items.Count) { AccountInfoList.SelectedIndex = AccountInfoListSelectedIndex; } 是在做什么?
2014年09月23日 05点09分
为什么我断点发现MouseUp函数不执行?
2014年09月26日 02点09分
回复 nolesun :额、这个是我处理的一些别的东西、没注意 你不用管
2014年09月26日 02点09分
level 8
我处理的有点麻烦、不知道有没有更好的办法、 上边的那个IsClick属性在这里没用、那个是我在别的逻辑里边判断用到的
2014年09月22日 07点09分 3
还有就是执行完mousedown以后,不走mouseup,就是不执行ShowAccountList.IsOpen = true,所以popup一直不出现。
2014年09月23日 05点09分
界面中popup的isopen还需要写吗?
2014年09月23日 05点09分
level 8
<Canvas x:Name="Pull" VerticalAlignment="Top" HorizontalAlignment="Right" MouseDown="Pull_MouseDown" MouseUp="Canvas_MouseUp" Width="20" Height="20" Margin="0,10,46,0" Grid.Row="1" >
<Image UseLayoutRounding="True" x:Name="Pulldown" Source="/images/login/Pull-down.png" Width="16" Height="16" Margin="2,2,2,2"/>
<Image UseLayoutRounding="True" x:Name="Pullup" Visibility="Hidden" Source="/images/login/Pull-up.png" Width="16" Height="16" Margin="2,2,2,2"/>
</Canvas>
这个是那个按钮
我用的是canvas。
2014年09月26日 02点09分 4
这种方法是解决了点击一下按钮,popup出现,再点击一下popup收回的问题。但是当点击按钮界面弹出时,这时按空白区域(非按钮),界面收回,再按按钮界面不弹出,需要再按一下才弹出。
2014年09月26日 05点09分
回复 nolesun :你跟一下,点击没有弹出那次,那三个变量都是什么属性?。
2014年09月26日 06点09分
回复 nolesun :你是否也添加了窗体的拖动事件?如果有 那么那个isclick就有用了
2014年09月26日 06点09分
回复 超大个萝呗 :我没有拖动事件,那isclick现在没用,那个有什么用。
2014年09月26日 06点09分
level 8
<Popup x:Name="ShowAccountList" Placement="Bottom" PlacementTarget="{Binding ElementName=Account}" StaysOpen="False" IsOpen="False" Closed="ShowAccountList_Closed" AllowsTransparency="True">
这个是popup的属性
2014年09月26日 02点09分 5
还是那个问题,根本不执行mouseup。
2014年09月26日 03点09分
回复 nolesun :把你的UI代码发一下吧、是不是挡住了什么的、如果实在不行就只能用previewmouseup了
2014年09月26日 03点09分
回复 超大个萝呗 :就这三部分,哪里有问题?
2014年09月26日 03点09分
level 5
nolesun 楼主
<Popup Placement="Top"
PlacementTarget="{Binding ElementName=BottomGrid}"
StaysOpen="False"
Name="ArchiveButtonPopup"
Closed="IsShowClosed"
IsOpen="{Binding IsChecked, ElementName=ArchiveButton, Mode=TwoWay}">
<!-- IsOpen="{Binding IsChecked, ElementName=ArchiveButton, Mode=TwoWay}">-->
<Grid Background="{DynamicResource MouseOverBrush2}">
<ContentControl Height="256" Width="1280"
prism:RegionManager.RegionName="ArchivingJobMonitorRegion" />
</Grid>
</Popup>
2014年09月26日 03点09分 6
level 5
nolesun 楼主
<CheckBox Style="{DynamicResource FlatToggleButton}"
Name="ArchiveButton"
>
<Image Source="icons/状态栏-归档.png"
Stretch="Fill"
Width="64"
Height="64"
Name="ArchiveImage"
ToolTip="归档"
MouseLeftButtonDown="PullMouseDown"
MouseLeftButtonUp="PushMouseUp"/>
</CheckBox>
2014年09月26日 03点09分 7
level 5
nolesun 楼主
private bool isShowClosed = true;
private bool isUnchenked = false; //鼠标是否在下拉框没有弹出的时候按下
private bool isClick = false; //鼠标是否按下
private void IsShowClosed(object sender, EventArgs e)
{
isShowClosed = true;
//isUnchenked = true;
}
private void PullMouseDown(object sender, MouseButtonEventArgs e)
{
isClick = true;
if (isShowClosed)
{
isUnchenked = true;
}
}
private void PushMouseUp(object sender, MouseButtonEventArgs e)
{
if (isUnchenked)
{
isUnchenked = false;
isShowClosed = false;
ArchiveButtonPopup.IsOpen = true;
}
}
2014年09月26日 03点09分 8
那块为啥要用个checkbox? 他会拦截鼠标事件啊、、、 我最开始就是用checkbox,是否选中绑定popup是否弹出。但是我尝试了很长时间,无法实现效果。
2014年09月26日 06点09分
回复 超大个萝呗 :因为我有好几个按钮,所以用checkbox,设置为previewmouseup实现了点击一下弹出,再点击收回的问题。但现在如果点击一下弹出后,我按一下空白区域,窗口不见了,但isopen还是true。所以再点按钮后,窗口不弹出。
2014年09月26日 06点09分
level 8
/// <summary>
/// 登陆窗体拖动事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (IsClick)
{
IsClick = false;
return;
}
try
{
this.DragMove();
}
catch (Exception)
{
}
}
2014年09月26日 06点09分 9
我不需要拖动事件,现在就是isopen那边设置为mode=oneway,所以在点击空白区域时他值不变,设成mode=twoway就又成了点击就一直弹出窗口,不会收回。
2014年09月26日 06点09分
回复 nolesun :isopen是绑定的?
2014年09月26日 07点09分
回复 超大个萝呗 :嗯,绑定到ischecked,跟着点击变。
2014年09月26日 07点09分
回复 nolesun :别绑定,直接后台控制
2014年09月26日 07点09分
level 11
正解是,你应该绑定的是tanglebutton,它支持点击切换,类似于打勾的多选框,这样每次点击就会切换值,这样你把isopen绑上,也就能跟着切换值了。不过我以前做过层切换,最好给他一个关闭判断,虽然直接绑定很简单,但是不保证你还有特殊要求
2014年10月02日 00点10分 10
level 1
哪位大神知道,如果contextmenu右键菜单的数量超出屏幕范围,怎么自动出来向上和向下的滚动按钮?
2016年03月05日 06点03分 11
这个应该算UE交互思路有问题,让UE打回重新设计去
2016年03月07日 06点03分
排查了所有代码问题,后来发现是第三方插件的问题,重新更新插件就好了。wpf会自带滚动按钮的。
2016年03月20日 07点03分
level 13

2016年03月06日 00点03分 12
level 1
可以设置它的焦点
2017年09月21日 13点09分 13
1