2015-01-26 59 views
0

我有一個EventTrigger動畫,它可以在單擊時更改TextBlock的不透明度。
這個觸發器的用途是當用戶點擊它時隱藏我的TextBlock。
它完美的作品。如何顛倒事件觸發器

不過,我想不通我怎麼能扭轉這種EventTrigger - 獲取透明度回 - 。

當我嘗試在我的代碼隱藏中更改它時,觸發器具有優先級,因此它不起作用。
我曾經想過創建一個新的EventTrigger其仍然做相反的事情,我不知道如果我能在我的代碼隱藏調用它..

我的TextBlock是隱藏=上的按鈕真只有當用戶點擊。這是一個錯誤TextBlock。
用戶可以點擊它來隱藏它。
如果用戶再次點擊按鈕,這個文本框現在被不透明度隱藏。
我必須從代​​碼隱藏中更改這種不透明度我看不出如何用其他方法計算出來。

我的XAML:

<TextBlock x:Name="ErrorTextBlock"> 
    <TextBlock.Triggers> 
     <EventTrigger RoutedEvent="TextBlock.MouseDown"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetName="ErrorTextBlock" 
            Storyboard.TargetProperty="Opacity" 
            From="1" To="0" Duration="0:0:2" 
            AutoReverse="False"> 

編輯:我沒有找到答案,我的問題,但是我找到其他的解決辦法。 問題是訂單 - 動畫第一,代碼 - 第二 - 後面 - 。 所以我只寫我的XAML動畫背後的代碼。 優先事項已經結束,問題得到解決。 =)

+1

什麼是應該觸發得到不透明度? – BradleyDotNET 2015-01-26 18:28:14

+0

在我的代碼隱藏:'ErrorTextBlock.Opacity = 1;' – C0ZEN 2015-01-26 18:34:48

+0

我不是專家,但你不能在XAML中做所有事情。如果這確實是不可行的,你需要的是一個布爾值來指示是否顯示錯誤消息,並且當你改變這個布爾值(在你的點擊事件中)時,在C#設置中啓動一個故事板或取消設置不透明度(基於這個布爾值)。 – Kilazur 2015-01-26 18:44:01

回答

0

在我看來,根據TextBlock的當前狀態,您希望能夠調整動畫中的FromTo值,以期望您的行爲總結。

我能夠寫一個簡單的IValueConverter和使用轉換器TextBlock.Opacity屬性綁定到動畫的To屬性來實現這一點(當然,在Opacity屬性設置爲From屬性,而不使用轉換器)。

轉換器:

class SubtractFromConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is double && parameter is double) 
     { 
      double doubleValue = (double)value, doubleParameter = (double)parameter; 

      return doubleParameter - doubleValue; 
     } 

     return Binding.DoNothing; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return Binding.DoNothing; 
    } 
} 

我簡單的測試XAML來證明它:

<StackPanel> 
    <TextBlock x:Name="textBox1" FontSize="36" Text="Hello world!"> 
    <TextBlock.Triggers> 
     <EventTrigger RoutedEvent="TextBlock.MouseDown"> 
     <BeginStoryboard> 
      <Storyboard> 
      <DoubleAnimation Storyboard.TargetName="textBox1" 
          Storyboard.TargetProperty="Opacity" 
          From="{Binding ElementName=textBox1, Path=Opacity}" 
          Duration="0:0:2" 
          AutoReverse="False"> 
       <DoubleAnimation.To> 
       <Binding ElementName="textBox1" Path="Opacity"> 
        <Binding.Converter> 
        <local:SubtractFromConverter /> 
        </Binding.Converter> 
        <Binding.ConverterParameter> 
        <system:Double>1.0</system:Double> 
        </Binding.ConverterParameter> 
       </Binding> 
       </DoubleAnimation.To> 
      </DoubleAnimation> 
      </Storyboard> 
     </BeginStoryboard> 
     </EventTrigger> 
    </TextBlock.Triggers> 
    </TextBlock> 
    <StackPanel Orientation="Horizontal"> 
    <TextBlock Text="Opacity: " /> 
    <TextBlock Text="{Binding ElementName=textBox1, Path=Opacity}" /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal"> 
    <TextBlock Text="Opacity: " /> 
    <TextBlock> 
     <TextBlock.Text> 
     <Binding ElementName="textBox1" Path="Opacity"> 
      <Binding.Converter> 
      <local:SubtractFromConverter /> 
      </Binding.Converter> 
      <Binding.ConverterParameter> 
      <system:Double>1.0</system:Double> 
      </Binding.ConverterParameter> 
     </Binding> 
     </TextBlock.Text> 
    </TextBlock> 
    </StackPanel> 
</StackPanel> 

我每次點擊TextBlock,它反轉動畫。

注意:您需要做一些額外的工作來適應技術,以確保動畫始終朝着您想要的方向運行。例如,不是僅使用當前的Opacity值,而是綁定到跟蹤當前切換狀態的其他屬性。

但我希望的基本技術–用結合動態控制動畫–是明確的FromTo性能。