gpt4 book ai didi

c# - 如何从tabitem wpf的数据模板中找到控件

转载 作者:行者123 更新时间:2023-11-30 19:54:02 24 4
gpt4 key购买 nike

我有 TabControl:

<TabControl Name="tabControl"                   
VerticalAlignment="Top"
HorizontalAlignment="Stretch">
<TabControl.Items>
<TabItem x:Name="tab1" Header="ABC">
<TabItem.ContentTemplate>
<DataTemplate>
<ScrollViewer Name="ScrollViewer">
<StackPanel Orientation="Vertical">
<TextBox Name="txt1" HorizontalAlignment="Center" Margin="0,26,0,0" />
<ListBox Name="listBox" DataContext="{Binding Items, Mode=TwoWay}" />
</StackPanel>
</ScrollViewer>
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
</TabControl.Items>
</TabControl>

如何在 C# 代码中以编程方式获取列表框?

我试过下面的代码,myContentPresenter.ContentTemplate 显示为空。

TabItem myListBoxItem = (TabItem)(tabControl.ItemContainerGenerator.ContainerFromItem(tabControl.SelectedItem));
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(myListBoxItem);
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
ListBox listBox = (ListBox)myDataTemplate.FindName("listBox", myContentPresenter);

最佳答案

基于@mm8 方法,以下解决方案将按名称而不是按类型查找 ListBox:

XAML

<TabControl x:Name="tabControl1" SelectionChanged="tabControl1_SelectionChanged">
<TabItem x:Name="tab1" Header="ABC">
<TabItem.ContentTemplate>
...

代码

private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Dispatcher.BeginInvoke(new Action(() => TabItem_UpdateHandler()));
}


void TabItem_UpdateHandler()
{
ContentPresenter myContentPresenter = tabControl1.Template.FindName("PART_SelectedContentHost", tabControl1) as ContentPresenter;
if (myContentPresenter.ContentTemplate == tab1.ContentTemplate)
{
myContentPresenter.ApplyTemplate();
var lb1 = myContentPresenter.ContentTemplate.FindName("listBox", myContentPresenter) as ListBox;
}
}

关于c# - 如何从tabitem wpf的数据模板中找到控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44492970/

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