gpt4 book ai didi

c# - 检测 VisualTree 或 LogicalTree 中的父级是否已在 WPF 控件中更改

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:07 25 4
gpt4 key购买 nike

我需要知道 VisualTree 或 LogicalTree 中的父项何时更改控件。我需要此功能,因为任何时候父更改我都需要重新评估控件的窗口类,以便我可以附加 Command- 和 InputBindings。

我有一个肮脏的方法,这意味着我需要附加到每个父元素并检查父元素的事件更改,但我希望有另一种解决方案。

例子:

我有一个用户控件

    <UserControl x:Class="WpfApplication21.UserControl1">
<UserControl.CommandBindings>
<CommandBinding Command="ApplicationCommands.Cut" Executed="SomeHandler"></CommandBinding>
</UserControl.CommandBindings>
</UserControl>

我有一个包含一个或多个用户控件的窗口

<Window x:Class="WpfApplication21.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication21"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.New" Executed="SomeHandler"></CommandBinding>
</Window.CommandBindings>
<StackPanel>
<local:UserControl1></local:UserControl1>
<local:UserControl1></local:UserControl1>
</StackPanel>
</Window>

虽然在示例中我已经放置了相同的命令,但这里只是为了在示例中显示。实际上每个控件都有不同的命令。每个UserControl的命令都需要合并到Window的CommandBindings中(InputBindings也是一样——这里不展示)。每个 UserControl 都是一个从 ViewModel 动态创建的插件,因此每个 ViewModel 都有一个不同的 View (该示例仅显示了 UserControl,但实际上这些是从 UserControl 派生的)。

出于这个原因,我创建了一个附加到由 ViewModel(由我创建)实现的 CommandProvider 的行为,这样它就可以在没有代码隐藏的情况下完成。

由于我有很多 ViewModel,因此我也需要管理 Command-/InputBindings 并将它们附加到窗口。一个问题是并非每个 View 都能获得焦点,并且如果用户控件事件聚焦,则 Command-/InputBindings 无法正常工作。

是不是有点清楚了?我现在的情况有点复杂。

最佳答案

I have a dirty way, which means I need to attach to each parent element and check for parent changes with events, but I was hoping there is another solution.

很抱歉让您失望,但没有其他方法,即没有“AnyParentChanged”事件或您可以连接的东西。

您需要以某种方式遍历所有父元素,并将事件处理程序连接到每个父元素的适当事件。要么是这个,要么重新考虑你的整个方法。

取决于可视化树中的父项是否“更改”可能不是解决您正在尝试做的任何事情的最佳方法。

关于c# - 检测 VisualTree 或 LogicalTree 中的父级是否已在 WPF 控件中更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41547043/

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