gpt4 book ai didi

wpf - 在 WPF ListBox 中访问 ListBoxItem-Controls

转载 作者:行者123 更新时间:2023-12-02 06:20:32 25 4
gpt4 key购买 nike

在 WPF 应用程序中,我使用在 XAML 中的以下 DataTemplate 中定义的 ItemTemplate 创建列表框:

<DataTemplate x:Key="ListItemTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel>
<Button/>
<Button/>
<Button Name="btnRefresh" IsEnabled="false"/>
<TextBlock/>
<TextBlock/>
<TextBlock/>
<TextBlock/>
</StackPanel>
<TextBox/>
</Grid>
</DataTemplate>

生成 ListBox 后,我需要将所有 ListBoxItem 上的以下按钮 IsEnabled 属性更改为 true:<Button Name="btnRefresh" IsEnabled="false"/>

问题:

我无法访问 ListBoxItem(s),因此无法使用其中的那个按钮访问他们的 child 。

在 WPF 中是否有类似 ListBox.Descendents() 的东西,它在 Silverlight 或任何其他方式中可以到达该按钮,

最佳答案

执行此操作的首选方法是更改​​ ViewModel 中绑定(bind)到该 Button 的 IsEnabled 属性的属性。向 ListBox.Loaded 事件添加处理程序,并在加载 ListBox 时将 ViewModel 中的该属性设置为 false。

另一种选择,如果您需要遍历 ListBox 中的每个数据模板化项,则执行以下操作:

    if (listBox.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
foreach (var item in listBox.Items)
{
ListBoxItem container = listBox.ItemContainerGenerator.ContainerFromItem(item) as ListBoxItem;
// Get button
ContentPresenter contentPresenter = contentPresenter.ContentTemplate.FindName("btnRefresh", contentPresenter);
Button btn = contentPresenter as Button;
if (btn != null)
btn.IsEnabled = true;
}
}

关于wpf - 在 WPF ListBox 中访问 ListBoxItem-Controls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11002227/

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