2015-11-19 123 views
1

我有按鈕,它應該切換元素的Opacity。目前它只能工作在一半 - 點擊使控制可見(設置不透明度爲1)。我試過使用ToogleButton而不是簡單的Button來使用屬性IsChechecked(我認爲它與IsClicked相同),但我發現對我來說並不好,因爲這個屬性我不能爲TargetName設置動畫。切換控制的不透明度

<ToggleButton BorderThickness="0" Background="Transparent" Grid.Column="0" Padding="0" Grid.Row="0" Focusable="False" Width="Auto" PreviewMouseUp="Share_Click"> 
         <ToggleButton.Content> 
          <Grid HorizontalAlignment="Stretch"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition /> 
            <ColumnDefinition /> 
           </Grid.ColumnDefinitions> 
           <TextBlock Margin="0,0,6,0" Grid.Column="0" Text="Filter" Foreground="#FFC0B6D1" FontFamily="Segoe UI Semibold" FontSize="14" /> 
           <Image Grid.Column="1" Margin="0,4,0,0" VerticalAlignment="Center" Height="6" Width="12" Name="FiltersToggleArrow" Style="{StaticResource ToogleFilters}"/> 
          </Grid> 
         </ToggleButton.Content> 
         <ToggleButton.Triggers> 
          <EventTrigger RoutedEvent="UIElement.PreviewMouseDown"> 
           <BeginStoryboard> 
            <Storyboard> 
             <DoubleAnimation BeginTime="0:0:0.00" Storyboard.TargetName="FiltersPanel" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:00.2" AutoReverse="False"/> 
            </Storyboard> 
           </BeginStoryboard> 
          </EventTrigger> 
         </ToggleButton.Triggers> 
        </ToggleButton> 
+0

@StepUp,你是什麼意思? – demo

回答

1

MSDN文檔說:

您可以在二傳手集合(集合,這二傳手是一部分)應用的範圍內設置該屬性的任何元素的名稱。這通常是包含此setter的模板中的一個命名元素。

要解決這個問題,你可以代替你申請你的StoryboardPanel,而不是ToggleButtonStyle內。在這種情況下,您可以使用DataTrigger綁定到IsChecked屬性並相應地執行操作。

這是我用ToggleButtonRectangle做的一個例子。

<ToggleButton Content="Switch" Name="chk"/> 

<Rectangle Fill="Red" Name="rect" 
      Width="50" Height="50"> 
    <Rectangle.Style> 
     <Style TargetType="Rectangle"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsChecked, ElementName=chk}" Value="False"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard 
           Storyboard.TargetProperty="Opacity"> 
           <DoubleAnimation From="1" 
                To="0"/> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
        <DataTrigger.ExitActions> 
         <BeginStoryboard> 
          <Storyboard 
           Storyboard.TargetProperty="Opacity"> 
           <DoubleAnimation From="0" 
                To="1"/> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.ExitActions> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Rectangle.Style> 
</Rectangle> 

從我對觸發器的經驗來看,它們可能是背後的王室痛苦,並且很難得到正確的結果。這就是說,這個例子應該足以滿足你的要求。