2014-09-30 62 views
0

想要改變基於枚舉值邊界的特性:邊框背景DataTrigger不改變

之類的東西能見度和透明度似乎改變,但背景或borderbushes ...

<Border Background="{StaticResource Gradient3}" 
     BorderBrush="Green" BorderThickness="1" 
     Height="25" Width="25" CornerRadius="25">    
    <Border.Style> 
     <Style TargetType="{x:Type Border}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Operation}" Value="0"> <!-- Idle --> 
        <Setter Property="Visibility" Value="Hidden"></Setter> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Operation}" Value="1"> <!-- Failure --> 
        <Setter Property="BorderBrush" Value="Red"></Setter>        
       </DataTrigger> 
       <DataTrigger Binding="{Binding Operation}" Value="2"> <!-- Success--> 
        <Setter Property="BorderBrush" Value="Purple"></Setter> 
        <Setter Property="Background" Value="Purple"></Setter>        
       </DataTrigger> 
       <DataTrigger Binding="{Binding Operation}" Value="3"> <!-- Running --> 
        <Setter Property="BorderBrush" Value="Purple"></Setter> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard Name="abc"> 
          <Storyboard> 
           <DoubleAnimation          
            Storyboard.TargetProperty="Opacity" 
            From="0" To="1" Duration="0:0:1" 
            RepeatBehavior="Forever"/> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
        <DataTrigger.ExitActions> 
         <RemoveStoryboard BeginStoryboardName="abc"/> 
        </DataTrigger.ExitActions> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Style> 
    <TextBlock FontWeight="ExtraBold" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center">?</TextBlock> 
</Border> 

這代碼觸發它:

private void ExecuteTestConnectionCommand(ConnectionString connection) 
{ 
    ThreadPool.QueueUserWorkItem(
     o => 
     { 
      Operation = OperationStatus.Running; 
      try 
      { 
       _connectionTester.Connect(connection); 
       IsBusy = true; 
       Operation = OperationStatus.Success; 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.Message); 
       Operation = OperationStatus.Failure; 
      } 
      // Do something 
      DispatcherHelper.CheckBeginInvokeOnUI(
       () => 
       { 
        // Dispatch back to the main thread 
        IsBusy = false; 
        // without this the button stays disabled until a ui interaction occurs 
        System.Windows.Input.CommandManager.InvalidateRequerySuggested(); 
       }); 
     }); 
} 

回答

1

您在Border直接設置Background。這稱爲本地值,本地值優先於任何其他源設置的值,包括樣式/模板觸發器和設置器。嘗試從Border聲明消除Background="{StaticResource Gradient3}",添加一個SetterStyle設置默認背景:

<Border.Style> 
    <Style TargetType="{x:Type Border}"> 
    <Setter Property="Background" Value="{StaticResource Gradient3}" /> 
    ... 

您需要爲您要使用觸發器更新任何其他值做相同的,例如,BorderBrush