gpt4 book ai didi

c# - 检测一组 WPF 控件丢失的焦点

转载 作者:太空狗 更新时间:2023-10-29 21:34:53 26 4
gpt4 key购买 nike

我正在使用具有可编辑内容的代码构建一个 GUI。当用户单击静态显示时,控件将换出一个允许编辑的控件。在某些情况下,显示控件(例如 Label)被换成一组控件,例如 ComboBox。和 TextBox .

我想检测焦点何时从我的可编辑控件组中丢失,以便将界面从编辑器切换回该项目的显示表示。

例如,我可能在类似 Panel1(Panel2(Button1, Button2), Button3) 的树中有一个 GUI我想检测焦点何时从 Panel2 丢失.我尝试了以下(F# 代码):

open System.Windows

let button1 = Controls.Button(Content="1")
let button2 = Controls.Button(Content="2")
let button3 = Controls.Button(Content="3")

[<System.STAThreadAttribute>]
do
let panel1 = Controls.StackPanel()
let panel2 = Controls.StackPanel()
panel2.Children.Add button1 |> ignore
panel2.Children.Add button2 |> ignore
panel1.Children.Add panel2 |> ignore
panel1.Children.Add button3 |> ignore
panel2.LostFocus.Add(fun _ ->
printfn "Panel2 lost focus")
Application().Run(Window(Content=panel1))
|> ignore

panel2.LostFocus button3 时触发事件在 button2 之后点击正如预期的那样被点击了,因为焦点移出了 panel1button3 .然而,当 button2 时也会被触发。在 button1 之后点击即使 panel2 也被点击了从未失去焦点。

阅读有关 WPF 中焦点的 MSDN 文档,我尝试添加:

Input.FocusManager.SetIsFocusScope(panel2, true)

但这实际上使问题变得更糟!现在 panel2.LostFocus仅当焦点从 panel2 的一个 child 转移时触发事件到另一个而不是什么时候 panel2实际上失去了焦点。

我应该如何获得理想的效果?

最佳答案

感谢Ian Voyce在 Twitter 上,我能够使用 IsKeyboardFocusWithinChanged 事件获得我需要的功能。这是一个演示:

open System.Windows

let Button x =
Controls.Button(Content=x, Width=64.0, Margin=Thickness 3.0)

let Panel ctrls =
let panel = Controls.StackPanel()
for ctrl in ctrls do
panel.Children.Add ctrl
|> ignore
panel

let label = Controls.Label(Content="Edit 12")
let button1 = Button "1"
let button2 = Button "2"
let button3 = Button "3"

let panel = Panel[button1; button2]

[<System.STAThreadAttribute>]
do
label.HorizontalContentAlignment <- HorizontalAlignment.Center
label.MouseLeftButtonDown.Add(fun _ ->
label.Content <- panel)
panel.IsKeyboardFocusWithinChanged.Add(fun e ->
if not(unbox e.NewValue) then
label.Content <- "Edit 12")
Application().Run(Window(Content=Panel[label :> UIElement; button3 :> UIElement]))
|> ignore

关于c# - 检测一组 WPF 控件丢失的焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com