我有一个包含以下按钮的wpf应用程序
<Button ToolTip="{x:Static prop:Resources.ROLES_POPOP}" Width="32" FontSize="16" Click="bottoncino_Click" x:Name="bottoncino" Margin="10,0,0,0" FontFamily="{StaticResource FontAwesome}" Content="">
</Button>
点击事件如下
private void bottoncino_Click(object sender, RoutedEventArgs e)
{
Button b = sender as Button;
UserComplete us = b.DataContext as UserComplete;
//us.OpenRolesList = !(us.OpenRolesList);
if (us.OpenRolesList == false)
us.OpenRolesList = true;
else us.OpenRolesList = false;
}
属性OpenRolesList绑定到以下PopUp的IsOpen属性
<Popup x:Name="listaruoli" IsOpen="{Binding ElementName=bottoncino, Path=DataContext.OpenRolesList}" PlacementTarget="{Binding ElementName=bottoncino}" AllowsTransparency="True"
PopupAnimation="Fade" StaysOpen="False">
<Grid >
<views:Roles/>
</Grid>
</Popup>
当用户在弹出窗口本身之外单击时,我需要关闭弹出窗口,因此我将StaysOpen属性设置为false。问题是,如果用户单击“ bottoncino”,则会发生弹出事件(因为我在弹出窗口之外单击),因此后者将关闭,然后bottoncino_Click将再次打开它。例如,当我使用触发器
打开弹出窗口时,我试图将Button的IsEnbled属性设置为False。<DataTrigger Binding="{Binding OpenRolesList}" Value="True">
<Setter Property="IsEnabled" Value="False"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding OpenRolesList}" Value="False">
<Setter Property="IsEnabled" Value="True"></Setter>
</DataTrigger>
但是由于Popup事件将首先触发,因此触发器将启用该按钮,并且Click仍被该按钮捕获,从而引发Click事件。
我也尝试处理Popup的Lost_focus事件以摆脱StaysOpen属性,但是如果我在Popup之外单击,似乎不会触发。
关于我该如何解决这个问题的任何想法?
P.S:如果有用的话,按钮和弹出窗口将不会互相看到,因为它们都位于数据网格中RowDetails的数据模板中