我的UserControl包含:
XAML
<UserControl>
<button Name="btnShowPopup" Content="Button" Click="Button_Click"/>
<Popup Name="popup" StaysOpen="true">
<TextBlock Text="Popup"/>
</Popup>
</UserControl>
Code Behide
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
this.popup.IsOpen=!this.popup.IsOpen;
}
问题:当鼠标点击btnShowPopup按钮外的任何地方时,我想隐藏弹出窗口。
注意:我尝试更改StaysOpen="false"
和btnShowPopup.MouseDown
事件:
this.popup.IsOpen=!this.popup.IsOpen;
但是这个解决方案会导致另一个问题:当btnShowPopup.MouseUp
事件时,Popup会消失。
请帮忙。
答案 0 :(得分:4)
您还可以在togglebutton:
上绑定StaysOpen属性StaysOpen="{Binding ElementName=toggleButton,Path=IsMouseOver}"
对我来说问题是,如果我双击我的数据网格,它在弹出窗口中,弹出窗口直接打开,那就是我使用多重绑定的原因。 我做了什么:
我在IsMouseOver toggleButton和我的IsMouseOver数据网格上的StayOpen属性绑定了弹出窗口。
<Popup.StaysOpen>
<MultiBinding Converter="{StaticResource MultiBinding_StayOpen}">
<Binding ElementName="toggleButton" Path="IsMouseOver"/>
<Binding ElementName="dtg_loc" Path="IsMouseOver" />
</MultiBinding>
</Popup.StaysOpen>
multiBindingConverter:
public class MultiBinding_StayOpen : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool toggleIsMouseOver;
bool datagridIsMouseOver;
toggleIsMouseOver = System.Convert.ToBoolean(values[0]);
datagridIsMouseOver = System.Convert.ToBoolean(values[1]);
if (toggleIsMouseOver == false && datagridIsMouseOver == false)
return false;
if (toggleIsMouseOver == true && datagridIsMouseOver == false)
return true;
if (toggleIsMouseOver == true && datagridIsMouseOver == true)
return false;
return true;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
希望有所帮助:-)
答案 1 :(得分:3)
我会尝试更多WPF式的方法。我会尝试绑定属性,而不是执行代码。如果您更改ToggleButton的Button,则很容易。你看,ToggleButton有一个名为IsChecked的布尔属性
<ToggleButton x:Name="myToggle" />
<Popup x:Name="Popup"
IsOpen="{Binding Path=IsChecked, ElementName=myToggle}"
Placement="Right"
PlacementTarget="{Binding ElementName=myToggle}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Fade"
StaysOpen="False">
<Textblock Text="Here goes my content" />
</Popup>
您怎么看?
答案 2 :(得分:3)
在切换按钮上设置属性ClickMode="Press"
。
<ToggleButton x:Name="myToggle" ClickMode="Press" />
答案 3 :(得分:2)
氧化钛。 这也是我正在尝试的解决方案。但是它有两个问题。
1)当您按下按钮时,弹出窗口会打开,但是如果再次按下该按钮,弹出窗口将关闭,然后再次快速打开。这不是我预期的行为,我认为它会再次关闭。
2)如果您远离切换按钮,则弹出窗口保持打开状态。
我用Google搜索了一下,当然其他一些人遇到了同样的问题,并解决了它:=)
检查一下: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/f0502813-9c4f-4b45-bab8-91f98971e407