3

この質問の答えを見つけるのに何時間もかかったので、FAQを書いたり、見つけたものに対する答えを書いたりしようと思いました。(これは、テキストボックスIsFocusedをポップアップIsOpenにバインドする次のスレッドと追加の条件に基づいています)

ポップアップをトグルボタンなど、Windows Chromeに基づいており、トリガーが組み込まれているものにバインドする例をたくさん見つけました。しかし、私のアプリケーションでは、カスタムブラシ塗りつぶしを使用してポップアップを単純な長方形にバインドしたいと思いました。ユーザーが長方形の上にマウスを置いたときにポップアップを開いたままにする方法の例を見つけることができませんでした。

だから私はこの質問を投稿しています、そしてうまくいけば他の誰かがそれから利益を得ることができるように私は見つけた答えをすぐに投稿します。また、stackoverflowがこのような投稿を許可するかどうか、または私がそれについて取り組むことができたより良い方法を理解するのを助けることができる人のために答えをマークします。

編集1)

私は8時間自己回答できないので、ここに動作するコードがあります。以下は、長方形/楕円などの基本的なUIElementでポップアップを使用する方法の簡単な例です...

<Grid HorizontalAlignment="Stretch" Height="Auto">
    <Rectangle x:Name="PopupRec"
               Grid.Row="0"
               Width="20" Height="20"
               HorizontalAlignment="Right" 
               Fill="Gray" Margin="0,0,0,10" />
    <Popup x:Name="SortPopup" 
           PlacementTarget="{Binding ElementName=PopupRec}" 
           StaysOpen="False" 
           PopupAnimation="Slide" 
           AllowsTransparency="True">
        <Border Background="White" Padding="15">
            <StackPanel Orientation="Vertical">
                <Button Command="{Binding MyCommand}" CommandParameter="5">5</Button>
                <Button Command="{Binding MyCommand}" CommandParameter="10">10</Button>
                <Button Command="{Binding MyCommand}" CommandParameter="15">15</Button>
                <Button Command="{Binding MyCommand}" CommandParameter="20">20</Button>
            </StackPanel>
        </Border>
        <Popup.Style>
            <Style TargetType="{x:Type Popup}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=PopupRec, Path=IsMouseOver}" Value="True">
                        <Setter Property="IsOpen" Value="True" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=SortPopup, Path=IsMouseOver}" Value="True">
                        <Setter Property="IsOpen" Value="True" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Popup.Style>
    </Popup>
</Grid>

これをwindow/usercontrol/etc内に貼り付けるだけです...

4

1 に答える 1

3

以下の改善をお勧めします。ポップアップスタイルは要素名から独立しているため、ウィンドウまたはユーザーコントロールに配置することでデフォルトのスタイルとして使用できますResources

<Style TargetType="{x:Type Popup}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsMouseOver,
                               RelativeSource={RelativeSource Self}}"
                     Value="True">
            <Setter Property="IsOpen" Value="True" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=PlacementTarget.IsMouseOver,
                               RelativeSource={RelativeSource Self}}"
                     Value="True">
            <Setter Property="IsOpen" Value="True" />
        </DataTrigger>
    </Style.Triggers>
</Style>

Rectangleまた、aは「基本的なUIElement」ではないことに注意してください。それはShapeであり、それ自体がFrameworkElementです。

于 2013-01-15T09:01:52.553 に答える