UserControl关闭触发器不触发

时间:2017-10-23 11:54:56

标签: c# wpf xaml triggers user-controls

对于这个问题,让我解释一下环境。

我在XAML中有一个UserControl,我无法触及后面的代码,我要在XAML部分完成所有操作。我也没有任何访问Window代码的权限。只有用户控件才能保存窗口位置。

问题是:我的关闭触发器永远不会被触发(但是这个触发器可以正常工作,并在代码中进一步点击取消按钮)

我无法访问我可以访问的代码的唯一部分。 由于userCommandBuilder,我无法在资源之前放置触发器。

触发器。

<UserControl     
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
...otherstuff...
MinWidth="946" MinHeight="902" MaxWidth="946" MaxHeight="902">
  <UserControl.Resources.../>
  <i:Interaction.Triggers>
            <i:EventTrigger EventName="Close">
            <i:InvokeCommandAction Command="{x:Static addin:AddInCommands.ExecuteCmdLine}" >
                    <i:InvokeCommandAction.CommandParameter>
                        <MultiBinding Converter="{StaticResource userCommandBuilder}" ConverterParameter="SRSAVEPOSITION -T {0} -L {1}">
                        <Binding RelativeSource="{RelativeSource AncestorType={x:Type Window}}" Path="Top"  />
                        <Binding RelativeSource="{RelativeSource AncestorType={x:Type Window}}" Path="Left"  />
                    </MultiBinding>
                </i:InvokeCommandAction.CommandParameter>
            </i:InvokeCommandAction>
        </i:EventTrigger>
  </i:Interaction.Triggers>

我错了什么? 怎么解决?

取消按钮代码

<Button Margin="0,0,0,0" IsCancel="True"  FontSize="13" FontFamily="Segoe UI">Cancel>
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="Click">
                                <i:InvokeCommandAction Command="{x:Static addin:AddInCommands.ExecuteCmdLine}" >
                                    <i:InvokeCommandAction.CommandParameter>
                                        <MultiBinding Converter="{StaticResource userCommandBuilder}" ConverterParameter="SRSAVEPOSITION -T {0} -L {1}">
                                            <Binding RelativeSource="{RelativeSource AncestorType={x:Type Window}}" Path="Top"  />
                                            <Binding RelativeSource="{RelativeSource AncestorType={x:Type Window}}" Path="Left"  />
                                        </MultiBinding>
                                    </i:InvokeCommandAction.CommandParameter>
                                </i:InvokeCommandAction>
                                <i:InvokeCommandAction Command="ApplicationCommands.Close" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                    </Button>

1 个答案:

答案 0 :(得分:1)

UserControl没有Close个事件。如果要处理Closing类中父窗口的ClosedUserControl事件,则必须编写一些代码。你不能在XAML中这样做。

例如,您可以在加载Window后获得UserControl的引用并执行命令:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
        Loaded += (s, e) => 
        {
            Window window = Window.GetWindow(this);
            if(window != null)
                window.Closing += Window_Closing;
        };
    }

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        AddInCommands.ExecuteCmdLine.Execute(...);
    }
}