2013-03-11 79 views
0

我想要一個按鈕的樣式取決於ViewModel屬性,它不是按鈕的一部分。奇怪的按鈕風格的行爲,改變故事板的顏色

所以我創建了以下

的按鈕XAML:

<Button Content="DisableButton" 
      Height="27" 
      HorizontalAlignment="Left" 
      Margin="95,197,0,0" 
      VerticalAlignment="Top" 
      Width="120" 
      Style="{DynamicResource ButtonOffline}" 
      Click="ButtonDisableClick"> 
    </Button> 

的風格(與屬性觸發不工作還試圖DataTrigger)

<Grid.Resources> 
     <Style x:Key="ButtonOffline" TargetType="{x:Type Button}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsOnline}" Value="false"> 
        <Setter Property="Background" Value="#FF808080"></Setter> 
        <Setter Property="BorderBrush" Value="Red"></Setter> 
        <Setter Property="BorderThickness" Value="5"></Setter> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding IsOnline}" Value="true"> 
        <Setter Property="Background" Value="#FF990000"></Setter> 
        <Setter Property="BorderBrush" Value="Blue"></Setter> 
        <Setter Property="BorderThickness" Value="2"></Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Grid.Resources> 

酒店

private bool isOnline; 
     public bool IsOnline 
     { 
      get 
      { 
       return isOnline; 
      } 
      set 
      { 
       isOnline = value; 
       NotifyPropertyChanged("IsOnline"); 
      } 
     } 

我的點擊處理

private void ButtonDisableClick(object sender, RoutedEventArgs e) 
     { 
      var isOnline = (this.DataContext as ComboBoxSampleViewModel).IsOnline; 
      (this.DataContext as ComboBoxSampleViewModel).IsOnline = !isOnline; 
     } 

現在,如果我按一下按鈕,就像一個故事板開始 和按鈕開始改變顏色,如動畫。

代碼有什麼問題?

更新 轉載於一個小樣本中,該樣本中只有按鈕功能。 什麼都沒有(除了基本的INotifyPropertyChanged實現)否則 這裏沒有發佈。

+0

我複製粘貼上面的例子,它工作正常嗎? – 2013-03-11 20:26:39

+0

這裏的按鈕緩慢地改變顏色,切換回來並再次改變顏色。在樣式中給出的目標顏色,淡入和淡出約1秒的動畫長度。 – 2013-03-11 20:29:03

回答

1

您必須將Focusable屬性設置爲false,這將停止按鈕閃爍。

<Button Content="DisableButton" 
     Focusable="False" 
     Height="27"    
     HorizontalAlignment="Left" 
     Margin="95,197,0,0" 
     VerticalAlignment="Top" 
     Width="120" 
     Style="{DynamicResource ButtonOffline}" 
     Click="ButtonDisableClick"> 
    </Button> 

發生這種情況是因爲在默認模板中必須有一些觸發器正在更改背景屬性。

第二種解決方案是創建自己的模板按鈕。

<Grid.Resources> 
    <Style x:Key="ButtonOffline" TargetType="{x:Type Button}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Grid x:Name="Grid"> 
         <Border CornerRadius="2" x:Name="Border" Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" 
         Padding="{TemplateBinding Padding}"/> 
         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
         Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
         RecognizesAccessKey="True"/> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsOnline}" Value="False"> 
       <Setter Property="Background" Value="#FF808080"></Setter> 
       <Setter Property="BorderBrush" Value="Red"></Setter> 
       <Setter Property="BorderThickness" Value="5"></Setter> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding IsOnline}" Value="True"> 
       <Setter Property="Background" Value="#FF990000"></Setter> 
       <Setter Property="BorderBrush" Value="Blue"></Setter> 
       <Setter Property="BorderThickness" Value="2"></Setter> 
      </DataTrigger>    
     </Style.Triggers> 
    </Style> 
</Grid.Resources> 
+0

這就是訣竅!謝謝!你能詳細說明爲什麼會發生這種情況嗎? – 2013-03-11 20:41:46

+0

@MareInfinitus再次檢查我的答案! – kmatyaszek 2013-03-11 20:57:04

+0

非常感謝! – 2013-03-11 20:59:47