我的ToggleButton
使用Style
和Trigger
来应用自定义Template
。代码如下:
<ToggleButton Checked="MyEvent">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Template" Value="{StaticResource OnTemplate}" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
正如您所看到的,ToggleButton也引发了Checked事件,其处理程序显示了一个对话框。现在问题是上面的触发器仅在事件处理程序执行后触发。有没有办法确定Trigger over事件处理程序的优先级,以便应用Template并在之后显示对话框?
答案 0 :(得分:0)
在为属性引发任何属性更改事件之前,首先执行路由事件。
但您可以通过invoking delegate asynchronously on dispatcher
实现此目的,以便template gets applied first
-
private void MyEvent(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke((Action)delegate { MessageBox.Show("Test String"); });
}
更新 -
您可以将DispatcherPriority
设置为较低的值(DispatcherPriority.Input
),以便首先触发触发器并在UI线程上暂停一小段时间(不是很好的方法,但没有其他方法)。这将有效 -
Dispatcher.BeginInvoke((Action)delegate { Thread.Sleep(500);
chkResultBoost.IsChecked = true; },
DispatcherPriority.Input);