2013-12-06 6 views
0

У меня есть триггер стиля, который заставляет мою стеклянную панель исчезать и выходить с помощью мыши. Я хотел бы добавить флажок в свою стеквую панель, которая заставит его оставаться открытым при проверке. Как я могу остановить раскадровку в XAML, когда мой флажок установлен?Остановить раскадровку от выполнения

<StackPanel Width="25" Opacity="0" Margin="0,0,0,5" HorizontalAlignment="Stretch" 
DockPanel.Dock="Right" Background="#FFEEEEEE"> 
<StackPanel.Style> 
    <Style> 
     <Style.Triggers> 
      <Trigger Property="Control.IsMouseOver" Value="True"> 
       <Trigger.EnterActions> 
        <StopStoryboard BeginStoryboardName="CloseStoryBoard" /> 
        <BeginStoryboard Name="OpenStoryBoard"> 
         <Storyboard DecelerationRatio="0.8"> 
          <DoubleAnimation 
Storyboard.TargetProperty="(FrameworkElement.Width)" To="600" /> 
          <DoubleAnimation Storyboard.TargetProperty="Opacity" 
To=".95" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.EnterActions> 
       <Trigger.ExitActions> 
        <StopStoryboard BeginStoryboardName="OpenStoryBoard" /> 
        <BeginStoryboard Name="CloseStoryBoard"> 
         <Storyboard DecelerationRatio="0.8"> 
          <DoubleAnimation 
Storyboard.TargetProperty="(FrameworkElement.Width)" To="25.0" /> 
          <DoubleAnimation Storyboard.TargetProperty="Opacity" 
To="0.0" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.ExitActions> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</StackPanel.Style> 
<CheckBox Content"Keep Open" /> 
</StackPanel> 

ответ

0

Хотя я отвечаю на это, кредит идет к Зафару выше, чтобы начать меня. Было еще одно условие, которое необходимо было добавить к его предложению, чтобы получить именно то решение, которое я искал. Я хотел опубликовать полное решение, если кому-то нужна эта функциональность. Ниже находится StackPanel, который исчезает и вызывается действием mouseover/out. Он остается открытым, если флажок установлен, независимо от положения мыши. И снова возвращается к использованию мыши, когда флажок снят. Я устанавливаю непрозрачность в 1 для тестирования, но обязательно устанавливаю прозрачность по мере необходимости.

<UserControl.Resources> 
<ControlTemplate x:Key="SlideoutResource" TargetType="ContentControl"> 
    <DockPanel HorizontalAlignment="Stretch"> 
     <StackPanel Name="SlideoutStackPanel" Width="25" Opacity="1" Margin="0,0,0,5" HorizontalAlignment="Stretch" DockPanel.Dock="Right" Background="#FFEEEEEE"> 
      <CheckBox Name="KeepOpenCheckBox" Content="Keep Open" /> 
     </StackPanel> 
     <Rectangle Name="DummyPlaceHolder" /> <!-- This placeholder is needed to make the fade work. --> 
    </DockPanel> 
    <ControlTemplate.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition x:Name="MouseOverCondition" SourceName="SlideoutStackPanel" Property="IsMouseOver" Value="True"/> 
       <Condition SourceName="KeepOpenCheckBox" Property="IsChecked" Value="False"/> 
      </MultiTrigger.Conditions> 
      <MultiTrigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="SlideoutStackPanel" Storyboard.TargetProperty="(StackPanel.Width)" To="600" Duration="0:0:1" /> 
         <DoubleAnimation Storyboard.TargetName="SlideoutStackPanel" Storyboard.TargetProperty="(StackPanel.Opacity)" To="1" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </MultiTrigger.EnterActions> 
     </MultiTrigger> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition SourceName="KeepOpenCheckBox" Property="IsChecked" Value="True"/> 
      </MultiTrigger.Conditions> 
      <MultiTrigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="SlideoutStackPanel" Storyboard.TargetProperty="(StackPanel.Width)" To="600" Duration="0:0:1" /> 
         <DoubleAnimation Storyboard.TargetName="SlideoutStackPanel" Storyboard.TargetProperty="(StackPanel.Opacity)" To="1" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </MultiTrigger.EnterActions> 
     </MultiTrigger> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition x:Name="MouseOutCondition" SourceName="SlideoutStackPanel" Property="IsMouseOver" Value="False"/> 
       <Condition SourceName="KeepOpenCheckBox" Property="IsChecked" Value="False"/> 
      </MultiTrigger.Conditions> 
      <MultiTrigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="SlideoutStackPanel" Storyboard.TargetProperty="(StackPanel.Width)" To="25" Duration="0:0:1" /> 
         <DoubleAnimation Storyboard.TargetName="SlideoutStackPanel" Storyboard.TargetProperty="(StackPanel.Opacity)" To="1" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </MultiTrigger.EnterActions> 
      <MultiTrigger.ExitActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="SlideoutStackPanel" Storyboard.TargetProperty="(StackPanel.Width)" To="600" Duration="0:0:1" /> 
         <DoubleAnimation Storyboard.TargetName="SlideoutStackPanel" Storyboard.TargetProperty="(StackPanel.Opacity)" To="1" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </MultiTrigger.ExitActions> 
     </MultiTrigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
</UserControl.Resources> 
<ContentControl Template="{StaticResource SlideoutResource}"/> 
0

Вы можете использовать ControlTemplate вместо StackPanel.Style. Но ControlTemplate должен быть объявлен в Window.Resources. Я делаю этот код для вас. Надеюсь, он работает так, как вам хочется.

<Window.Resources> 
    <ControlTemplate x:Key="myResource" TargetType="ContentControl"> 
     <StackPanel Name="myStackPanel" Width="25" Background="Black" Opacity="0"> 
      <CheckBox Name="myCheckBox" HorizontalAlignment="Center" Content="Keep Open" Foreground="Aqua"/> 
     </StackPanel> 
     <ControlTemplate.Triggers> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition SourceName="myStackPanel" Property="IsMouseOver" Value="True"/> 
        <Condition SourceName="myCheckBox" Property="IsChecked" Value="False"/> 
       </MultiTrigger.Conditions> 
       <MultiTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetName="myStackPanel" Storyboard.TargetProperty="(StackPanel.Width)" To="600" Duration="0:0:1" /> 
          <DoubleAnimation Storyboard.TargetName="myStackPanel" Storyboard.TargetProperty="(StackPanel.Opacity)" To="1" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </MultiTrigger.EnterActions> 
       <MultiTrigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetName="myStackPanel" Storyboard.TargetProperty="(StackPanel.Width)" To="25" Duration="0:0:1" /> 
          <DoubleAnimation Storyboard.TargetName="myStackPanel" Storyboard.TargetProperty="(StackPanel.Opacity)" To="0.0" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </MultiTrigger.ExitActions> 
      </MultiTrigger> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition SourceName="myCheckBox" Property="IsChecked" Value="True"/> 
       </MultiTrigger.Conditions> 
       <MultiTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetName="myStackPanel" Storyboard.TargetProperty="(StackPanel.Width)" To="600" Duration="0:0:1" /> 
          <DoubleAnimation Storyboard.TargetName="myStackPanel" Storyboard.TargetProperty="(StackPanel.Opacity)" To="1" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </MultiTrigger.EnterActions> 
       <MultiTrigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetName="myStackPanel" Storyboard.TargetProperty="(StackPanel.Width)" To="25" Duration="0:0:1" /> 
          <DoubleAnimation Storyboard.TargetName="myStackPanel" Storyboard.TargetProperty="(StackPanel.Opacity)" To="0.01" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </MultiTrigger.ExitActions> 
      </MultiTrigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
</Window.Resources> 

<ContentControl Template="{StaticResource myResource}"/> 
+0

Благодарим за отзыв. К сожалению, это проблема, с которой я столкнулся. Флажок отлично работает, отключая раскадровку, но при этом флажок не включается и отключается, когда флажок снят. Я надеюсь с твоим предложением, что смогу понять это. Если вы ... или кто-нибудь еще читает это ... есть предложение, я с радостью принимаю любые предложения. –

+0

Чтобы прояснить мой вышеприведенный комментарий. IsMouseOver работает так, как должно, пока флажок не будет установлен, чтобы держать панель открытой (когда мышь не находится над панелью). Когда флажок снят, IsMouseOver больше не работает. Любые предложения были бы большой помощью. –

Смежные вопросы