1

我想知道是否有任何相对简单的方法来本质上创建一个“撤消”按钮,该按钮将撤消之前发生的任何事件。问题是,我不能明确地做到这一点(例如,如果背景是白色的,然后它变成红色,我不能只是让撤消按钮将背景重置为白色)。我不能这样做,因为我不知道最后发生了哪个事件,可能发生了许多事件,而且我不希望每个事件都有一个单独的撤消按钮。

举个例子,我在网格中有几个标签,当我将鼠标悬停在任何标签上时,它会变成更大的尺寸,而所有其他标签都会变成标准(更小)尺寸。但是,有时其中一个标签已经是更大的尺寸(来自按钮等)——我们称之为 label1。因此,当我将鼠标悬停在另一个标签上时——让我们称之为 label2——然后 label2 变大而 label1 现在变小了。但是当我将鼠标从 label2 上移开时,我希望 label1 再次变大而 label2 应该再次变小。提前感谢您的任何帮助/策略!

PS我对WPF很新,所以解决方案越简单越好:)但是任何事情都值得赞赏!

编辑:我认为一个简单的方法是:有没有办法创建一个 MouseLeave 事件来撤消 MouseEnter 事件所做的任何事情?

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 回答