在button.click

时间:2018-07-23 09:31:50

标签: c# wpf popup

我有一个包含以下按钮的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="&#xf0ec;">
</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的数据模板中

0 个答案:

没有答案