Недавно я работал над некоторым простым Imageviewer.Acrobat-like PopUp в WPF
Теперь мне показалось, что это может быть приятной особенностью, чтобы сделать некоторые действия с контекстно-чувствительным действием, такие как Масштабирование и вращение.
Для реализации этих функций не является моей проблемой, но ContextMenu
есть.
Я решил не использовать ContextMenu
-Element, вместо этого я собираюсь использовать всплывающее окно.
Причины всплывающий:
- Менее Styling
- Лучше Позиционирование
- IsOpen является Bindable (ContextMenu НЕ Привязываемое на IsOpen против всех статей относительно этого)
Здесь возникает проблема:
<Image x:Name="PART_ImgCurrent" VerticalAlignment="Center" HorizontalAlignment="Center" Stretch="Uniform" Grid.Row="0" Grid.Column="0"
Source="{Binding ElementName=PART_PreviewPanel, Path=SelectedItem.Source}">
<Image.LayoutTransform>
<RotateTransform Angle="0"></RotateTransform>
</Image.LayoutTransform>
<Image.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="PART_ImgCurrent" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:3" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Image.Triggers>
</Image>
<Popup IsHitTestVisible="False" Focusable="False" PlacementTarget="{Binding ElementName=PART_ImgCurrent}" AllowsTransparency="True" StaysOpen="True"
IsOpen="{Binding ElementName=PART_ImgCurrent, Path=IsMouseOver, Mode=OneWay}"
Placement="Right" HorizontalOffset="-42" VerticalOffset="2">
<StackPanel Opacity="0.5" VerticalAlignment="Stretch">
<Button Content="Ugly Button" Height="40" Width="40"></Button>
<Button Content="Ugly Button" Height="40" Width="40"></Button>
<Button Content="Ugly Button" Height="40" Width="40"></Button>
</StackPanel>
</Popup>
Как вы можете видеть, им связывание IsOpen
из Popup
к IsMouseOver
на изображения, что приводит к смешным диско-Blinkenlights-поведение, когда я пытаюсь нажать на кнопку внутри Popup
.
Как это связано с заголовком?
Это почти точно поведение им в поисках. Как называется эта вещь?
У кого-то были подобные проблемы и могли бы предложить решение?
То, что вы видите, действительно ожидалось. Поскольку, когда вы передаете курсор на изображение, PopUp IsOpen = True, как только ваш курсор переместится в PopUp, тогда у Image больше не будет IsMouseOver, потому что PopUp просто схватил его в Z-index, который выдает IsOpen = False, как только он делает это, Image возвращает его и выбрасывает IsOpen = True, и поведение повторяется, чтобы вызвать мигание. Вы просто хотите, чтобы, когда Mouse is Over image вы получаете свое меню и можете взаимодействовать, и когда мышь оставляет изображение, меню уходит? Всего лишь уточняю. –
Ну в принципе да. Я знаю, я мог бы сделать это в Code-Behind без каких-либо проблем, так как его «CustomControl», но, как указано в Intellisense Tooltip (это звучит как минимум для меня), «IsMouseOver» должен позволить мне сделать это. Но похоже, что PopUp никогда не является дочерним элементом Image в VisualTree, поэтому единственное возможное решение могло бы быть, чтобы сделать это в Code-Behind .... Я боялся этого – lokusking
Хахаха ни один человек не переделывает его, вы просто сделаете свою жизнь труднее. Вам просто нужно передать мероприятие, и все, что вам нужно, это xaml. Через секунду я приведу пример. :) –