执行单击命令后按钮闪烁

时间:2013-06-06 11:00:58

标签: .net wpf xaml button wpf-controls

我遇到了奇怪的问题。我有一个带按钮的表格。我将按钮的背景颜色设置为Blue,它看起来像下图。

enter image description here

当我将鼠标移到它上面时,它会变成淡蓝色。

enter image description here

现在我按下鼠标左键而不离开按钮,将鼠标拖到按钮边界之外,然后单击鼠标左键。然后按钮开始闪烁并改变这两个图像之间的颜色,并且永远不会停止,直到我点击任何其他控件。另外,我有一个附加到此控件的命令。如果我单击此控件然后执行命令,再次按钮开始在这两个图像之间闪烁,并且永远不会停止,直到我单击任何其他控件,如文本框,复选框或其他内容。任何人都可以帮助我理解这一点。

下面是按钮的XAML。

    <Button x:Name="BtnConvert" Content="Start Conversion Process" 
            Margin="0,436,433,0" 
            Height="108" Command="{Binding StartConvertProcess}" 
            VerticalAlignment="Top" HorizontalAlignment="Right" 
            Width="236" FontSize="14" Background="#FF5998B6"/>

修改

ViewModel代码

    private void StartConvertProcessMethod()
    {
        string errorMessage;
        bool result = _model.ConvertFiles(SourcePath, TargetPath, DataSource, out errorMessage);

        string caption;
        MessageBoxIcon messageBoxIcon;

        if (result)
        {
            caption = "Completed";
            messageBoxIcon = MessageBoxIcon.None;
        }
        else
        {
            caption = "Completed with Errors";
            messageBoxIcon = MessageBoxIcon.Error;
        }

        MessageBox.Show(errorMessage, caption, MessageBoxButtons.OK, messageBoxIcon);
    }

1 个答案:

答案 0 :(得分:0)

我通过为我的按钮定义ControlTemplate解决了这个问题。像这样:

<ControlTemplate TargetType="{x:Type Button}" x:Key="PlainButtonTemplate">
        <Border x:Name="bdr_main" BorderThickness="1" BorderBrush="LightGray" CornerRadius="6"  Background="Transparent">
        <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0" ContentSource="Content" />
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="bdr_main" Property="Background" Value="Transparent"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter TargetName="bdr_main" Property="Background" Value="Gainsboro"/>
            </Trigger>
        </ControlTemplate.Triggers>

然后将模板应用于您的按钮。

<Style x:Key="PlainButton" TargetType="{x:Type Button}">
        ...
        <Setter Property="Template" Value="{DynamicResource PlainButtonTemplate}"></Setter>
        ...
</Style>

将模板和样式放在单独的ResourceDictionary中,然后在页面中引用字典,使用按钮:

<Window.Resources>
 <ResourceDictionary>
  <ResourceDictionary x:Key="Dict" Source="ResourceDictionaries\ButtonsDictionary.xaml" />                
 </ResourceDictionary>        
</Window.Resources>