对于这个问题,让我解释一下环境。
我在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>
答案 0 :(得分:1)
UserControl
没有Close
个事件。如果要处理Closing
类中父窗口的Closed
或UserControl
事件,则必须编写一些代码。你不能在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(...);
}
}