最近、いくつかの簡単なImageviewerで作業しています。WPFのAcrobat風ポップアップ
これで、ズームや回転などの文脈に敏感な操作を行うのは良い点です。
これらの機能を実装するのは私の問題ではありませんが、ContextMenu
です。
私はContextMenu
-Elementを使用しないことにしました。代わりにポップアップを使用します。ポップアップ用
理由:
- 少ないスタイリング
- より良いポジショニング
- のIsOpenは、バインド可能な(の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>
あなたが見ることができるように、私はPopup
内のボタンをクリックしようとすると、変なディスコ・ブリンケンライト・行動につながる画像上IsMouseOver
にPopup
のIsOpen
を結合イム。
タイトルとは何が関係していますか?
のAcrobatReaderは、これはほぼ正確に動作イムが探しているこの
を持っています。このことはどのように呼ばれますか?
誰かに似たような問題があって解決策を提供できましたか?
あなたが見ているものは、実際には期待されるでしょう。カーソルをImageに渡すとPopUp IsOpen = Trueとなり、PopUpにカーソルが移動すると、PopUpはIsOpen = FalseをスローするZ-indexで取得したため、IsMouseOverはなくなります。それは、Imageはそれを取り戻し、IsOpen = Trueを投げて、あなたの点滅を引き起こすような振る舞いを繰り返します。あなたはちょうどそれが欲しいですか?あなたはあなたのメニューを取得し、相互作用することができます。マウスが画像を残すと、メニューは消えますか?ただ確実にする。 –
まあ基本的にはい。私は知っている、私は 'CustomControl'以来、コードビハインドでこれを行うことができますが、Intellisense Tooltip(これは私には少なくともこのように聞こえる)として、' IsMouseOver'は私にこれをさせるべきです。しかし、PopUpはVisualTreeのImageの子ではないようですので、Code-Behindでこれを行うには唯一可能な解決策があるかもしれません....私は恐れていました – lokusking
Hahahaの人間はそれをエンジニアリングしていません。あなたはあなたの人生をもっと難しくします。あなたはイベントを渡す必要があり、必要なのはxamlだけです。 1秒私は例を作ります。 :) –