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