gpt4 book ai didi

wpf - 将 CommandTarget 设置为 TabControl 中的选定控件

转载 作者:行者123 更新时间:2023-12-02 05:13:47 25 4
gpt4 key购买 nike

我有一个带有几个按钮的 WPF 窗口和一个 tabcontrol,它为用户正在处理的每个“文档”提供一个选项卡。 tabcontrol 使用 DataTemplate 来呈现 tabcontrol 的 ItemSource 中的数据。

问题:如果单击其中一个按钮,则应在将文档呈现在事件选项卡中的控件上执行该命令,但我不知道应该将 CommandTarget 设置为什么。我试过 {Binding ElementName=nameOfControlInDataTemplate} 但这显然不起作用。

我尝试使用以下代码使我的问题更加抽象(没有 ItemSource 和 Document 对象,但想法仍然相同)。

<Button Command="ApplicationCommands.Save" CommandTarget="{Binding ElementName=nestedControl}">Save</Button>
<TabControl x:Name="tabControl">
<TabControl.Items>
<TabItem Header="Header1">Item 1</TabItem>
<TabItem Header="Header2">Item 2</TabItem>
<TabItem Header="Header3">Item 3</TabItem>
</TabControl.Items>
<TabControl.ContentTemplate>
<DataTemplate>
<CommandTest:NestedControl Name="nestedControl"/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>

我通过仅用一个 NestedControl 替换完整的 tabcontrol 来测试代码,然后命令按钮就可以工作了。

为了完整起见,这里是 NestedControl 的代码:
<UserControl x:Class="CommandTest.NestedControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Label x:Name="label" Content="Not saved"/>
</Grid>
</UserControl>

和后面的代码:
public partial class NestedControl : UserControl {
public NestedControl() {
CommandBindings.Add(new CommandBinding(ApplicationCommands.Save, CommandBinding_Executed));
InitializeComponent();
}

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) {
label.Content = "Saved";
}
}

最佳答案

我不确切知道 CommandTarget 是如何工作的,但是绑定(bind)到 TabControl 中的事件选项卡是通过以下方式完成的:

"{Binding ElementName=tabControl,Path=SelectedItem}"

(SelectedItem 是当前事件的选项卡)

编辑:

关于 CommandTarget 的更多信息可以在这里找到: Setting Command Target in XAML

编辑 2:

删除了我最初的答案,因为它不是问题的答案。

关于wpf - 将 CommandTarget 设置为 TabControl 中的选定控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2910790/

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