2013-08-15 17 views
6

Piszę program za pomocą WPF (C#). Używam kilku przycisków. Przycisk Anny zaczyna migać po kliknięciu! Jego kolor zanika od koloru tła do koloru aqua (jasnoniebieski). Nie przestaje migać, kiedy klikam inny przycisk (wtedy ten przycisk zaczyna migać !!!). Czy to błąd? czy to jest związane z moim studiem wizualnym?Jak uniknąć flashowania WPF

Jak mogę rozwiązać ten problem?

+2

Jego VisualStyle defualt przycisku , Windows używa tego od lat, nie jest nowy, zdarza się, gdy przycisk ma fokus, jeśli chcesz zatrzymać przycisk, możesz zmienić szablon przycisku lub po prostu nie skupiać się na przyciskach: –

Odpowiedz

2

Po pierwsze, można spróbować ustawić przycisk Focusable do False. Będzie to jednak problem, jeśli korzystasz z nawigacji po klawiaturze. Zrobiłem jednak znaleźć ten kod Window.Resource XAML:

<Window.Resources> 
<Style x:Key="ButtonFocusVisual"> 
    <Setter Property="Control.Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
<LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0"> 
    <GradientStop Color="#F3F3F3" Offset="0"/> 
    <GradientStop Color="#EBEBEB" Offset="0.5"/> 
    <GradientStop Color="#DDDDDD" Offset="0.5"/> 
    <GradientStop Color="#CDCDCD" Offset="1"/> 
</LinearGradientBrush> 
<SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/> 
<Style x:Key="BoringButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/> 
    <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/> 
    <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
    <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Padding" Value="1"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Microsoft_Windows_Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" RenderDefaulted="{TemplateBinding IsDefaulted}" SnapsToDevicePixels="true"> 
        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </Microsoft_Windows_Themes:ButtonChrome> 
       <ControlTemplate.Triggers> 
        <Trigger Property="ToggleButton.IsChecked" Value="true"> 
         <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="#ADADAD"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Potem, gdy chcesz zastosować przycisk niestandardowy styl, ustaw przycisk Style do:

<Button Style="{DynamicResource BoringButtonStyle}"/> 
+0

Microsoft_Windows_Themes: ButtonChrom e dając komunikat o błędzie. To jest Micorsoft.Windows.Themes: ButtonChrome. To nie działa. Daje mi to komunikat, że ButtonChrome nie jest obsługiwany w projekcie WPF. –

2

można zastąpić szablon Button usunąć domyślnej Themed(Aero) stylem

coś takiego będzie dobrym miejscem do rozpoczęcia.

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border x:Name="Border" CornerRadius="2" BorderThickness="1" Background="{x:Static SystemColors.ControlBrush}" BorderBrush="{x:Static SystemColors.ControlDarkDarkBrush}"> 
        <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsKeyboardFocused" Value="True"> 
         <Setter TargetName="Border" Property="BorderBrush" Value="{x:Static SystemColors.ControlBrush}" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="{x:Static SystemColors.ControlDarkDarkBrush}" /> 
        </Trigger> 
        <Trigger Property="IsDefaulted" Value="True"> 
         <Setter TargetName="Border" Property="BorderBrush" Value="{x:Static SystemColors.ControlBrush}" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="{x:Static SystemColors.ControlDarkDarkBrush}" /> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter TargetName="Border" Property="Background" Value="{x:Static SystemColors.ActiveCaptionBrush}" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="{x:Static SystemColors.ControlDarkDarkBrush}" /> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter TargetName="Border" Property="Background" Value="{x:Static SystemColors.ActiveCaptionBrush}" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="{x:Static SystemColors.ControlDarkDarkBrush}" /> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter TargetName="Border" Property="Background" Value="#EEEEEE" /> 
         <Setter TargetName="Border" Property="BorderBrush" Value="#AAAAAA" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>