1

直前に発生したイベントを元に戻す「元に戻す」ボタンを本質的に作成する比較的簡単な方法があるかどうか疑問に思っていました。問題は、明示的に行うことができないことです (たとえば、背景が白で、その後赤になった場合、元に戻すボタンで背景を白にリセットすることはできません)。どのイベントが最後に発生したかがわからないため、この方法では実行できません。発生した可能性のあるイベントが多数ある可能性があり、イベントごとに個別の元に戻すボタンは必要ありません。

例を挙げると、グリッドにいくつかのラベルがあり、任意のラベルにマウスを合わせると、大きいサイズに変わり、他のすべてのラベルは標準 (小さい) サイズになります。ただし、ラベルの 1 つが (ボタンなどから) 既に大きいサイズになっている場合があります。これを label1 と呼びましょう。別のラベルにマウスを合わせると (これを label2 と呼びましょう)、label2 は大きくなり、label1 は小さくなります。しかし、マウスを label2 から離すと、label1 は再び大きくなり、label2 は再び小さくなります。事前に助け/戦略をありがとう!!

PS私はWPFにかなり慣れていないので、ソリューションがシンプルであるほど良いです:)しかし、何でも感謝しています!

編集:これを尋ねる簡単な方法は次のとおりだと思います:MouseEnterイベントによって行われたことを元に戻すMouseLeaveイベントを作成する方法はありますか?

4

1 に答える 1

0

私は VB を使用していないので、慣習については申し訳ありませんが、これは簡単な例として役立つはずです。

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <StackPanel x:Name="stackPanel">
        <Label FontSize="10" Margin="10" MouseEnter="OnMouseEnter" >1</Label>
        <Label FontSize="10" Margin="10" MouseEnter="OnMouseEnter" >2</Label>
        <Label FontSize="10" Margin="10" MouseEnter="OnMouseEnter" >3</Label>
        <Label FontSize="10" Margin="10" MouseEnter="OnMouseEnter" >4</Label>
     </StackPanel>
 </Window>

コードビハインド:

Class MainWindow

Dim _mouseLeaveSize As Double = 10
Dim _mouseEnterSize As Double = 20

Private Sub OnMouseEnter(ByVal sender As Object, ByVal e As MouseEventArgs)

    For Each child As Visual In stackPanel.Children
        SetLabelLeaveProperties(child)
    Next

    Dim label = CType(sender, Label)
    label.FontSize = _mouseEnterSize

End Sub

Private Sub SetLabelLeaveProperties(ByVal myVisual As Visual)

    Dim label = TryCast(myVisual, Label)

    If label Is Nothing Then
        'iterate thru children to see if anymore labels 
        For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(myVisual) - 1
            Dim child = VisualTreeHelper.GetChild(myVisual, i)
            Dim l = TryCast(child, Label)
            If l Is Nothing Then
                SetLabelLeaveProperties(child)  'Enumerate children of the child visual object.
            Else
                l.FontSize = _mouseLeaveSize
            End If
        Next i
    Else
        label.FontSize = _mouseLeaveSize
    End If

End Sub
于 2013-06-25T21:38:09.523 に答える