2016-04-03 3 views
0

У меня есть ToggleButton, которые открывают всплывающее окно и имеют ItemsControl в Popup.Раскадровка в DataTemplate

Я хочу скрыть всплывающее окно, когда нажимаем на элементы управления элементами.

<ToggleButton Content="?????" x:Name="LeaveButton" Style="{StaticResource ToggleButtonImageStyle}" Padding="13"/> 
<Popup 
    KeyDown="UIElement_OnKeyDown" 
    Opened="SubMenuPopup_OnOpened" 
    IsOpen="{Binding IsChecked, ElementName=LeaveButton}" 
    StaysOpen="False" 
    x:Name="LeavePopup" 
    AllowsTransparency="True" 
    PopupAnimation="Fade" 
    PlacementTarget="{Binding ElementName=LeaveButton}" 
    Placement="Right"> 
    <StackPanel Orientation="Horizontal" Margin="15"> 
     <Polygon Points="15 15,0 30,15 45" Fill="{DynamicResource HeaderBackgroundBrush}" /> 
     <StackPanel Width="250"> 
     <ItemsControl ItemsSource="{Binding WorkshopList}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Button 
        Content="{Binding Name}" 
        Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.LeaveCommand}" 
        CommandParameter="{Binding Id}" 
        Style="{StaticResource ButtonImageTextStyle}" 
        Padding="20"> 
        <Button.Triggers> 
         <EventTrigger RoutedEvent="ButtonBase.Click"> 
          <BeginStoryboard Storyboard="{StaticResource HideLeavePopup}" /> 
         </EventTrigger> 
        </Button.Triggers> 
        </Button> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
     </StackPanel> 
    </StackPanel> 
</Popup> 

и установить историю для этого.

<Storyboard x:Key="HideLeavePopup" Storyboard.TargetName="LeaveButton" Storyboard.TargetProperty="IsOpen"> 
    <BooleanAnimationUsingKeyFrames> 
     <DiscreteBooleanKeyFrame KeyTime="00:00:00.1" Value="False" /> 
    </BooleanAnimationUsingKeyFrames> 
</Storyboard> 

, но когда я использую это, я получаю следующее сообщение об ошибке

LeaveButton name can not be found in the name scope of type 'System.Windows.Control.Button'

+0

Помимо разрешения ошибки вы получаете, я думаю, что ваш подход не является хорошим (я обнаружил, что из себя не так давно). Проблема с анимацией свойств заключается в том, что она фактически не устанавливает значение свойства, а скорее переопределяет эффективное значение. В результате возможны два сценария: если анимация 'FillBehavior' установлена ​​в' HoldEnd', анимация предотвратит повторное открытие всплывающего окна (эффективное значение 'IsOpen' будет удерживаться' false'), else (если установлено значение 'Stop '), то эффективное значение IsOpen вернется к' true', в результате всплывающее окно снова откроется после завершения анимации. – Grx70

ответ

0

Это зависит от того, где Stroryboard определяется так, я предполагаю, что он находится в Window.Resources или что-то в этом роде. Вы используете TargetName как LeaveButton и TargetProperty как IsOpen. Вы хотите, либо LeaveButton и IsChecked или LeavePopup и IsOpen. Также попробуйте изменить TargetName к Target и использовать связывание

<Storyboard x:Key="HideLeavePopup" 
      Storyboard.Target="{Binding ElementName=LeaveButton}" 
      Storyboard.TargetProperty="IsChecked"> 
    <BooleanAnimationUsingKeyFrames> 
     <DiscreteBooleanKeyFrame KeyTime="00:00:00.1" Value="False" /> 
    </BooleanAnimationUsingKeyFrames> 
</Storyboard> 
+0

Спасибо, я использую это, но снова получаю erro. –

+0

Какая ошибка? Как и в вашем вопросе? Где определяется раскадровка? – dkozl

+0

Большое спасибо ... это нормально :) –

1

Пробовали ли вы this?

Внутри раскадровку, вместо

Storyboard.TargetName="LeaveButton" 

использования

Storyboard.Target="{Binding ElementName=LeaveButton}" 
+0

Спасибо, но я получаю ошибку: IsChecked: истинное имя не может быть источником во имя области –

+0

Еще один ответ дал понять. Это должно быть свойство IsOpen, а не IsChecked. –

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