0

ToggleButton使用 aStyle和 aTrigger来应用自定义的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 事件,其处理程序会显示一个对话框。现在的问题是上述触发器仅在事件处理程序执行后才会触发。有没有办法将触发器优先于事件处理程序,以便应用模板并随后显示对话框?

4

1 回答 1

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);
于 2013-11-11T17:38:11.533 回答