引用列表框内的其他UserControls



我似乎无法解决的问题是我感到尴尬和烦恼的事情。我有一个UserControls的ListBox,并且从一个Button事件,我想操作ListBox中的其他UserControls。

为了测试的目的,我有一个简单的UserControl (UserControl1)与一个按钮(ButtonNotify)。

我正在添加UserControls到ListBox (MyListBox)。

For i = 0 To 2
Dim TestItem As New UserControl1
TestItem.ButtonNotify.Content = "Blank"
MyListBox.Items.Add(TestItem)
Next

所以我从显示"Blank"的按钮文本开始。当我点击按钮时,它会显示"Yes":

ButtonNotify.Content = "Yes"

当然可以。但是,当我这样做时,我希望其他两个UserControls显示"No"

如果我点击项目0,我想让它显示&;yes &;(这个可以)但是我想让另外两个项目,项目1和项目2显示"no"。如果我点击第1项,显示"是",第0项和第2项显示"否",以此类推。

我的问题是我似乎找不到一种方法来访问列表框中的其他UserControls。

我正在尝试这样做:

对于每个UserControl1在MyListBox,和变体,没有成功。

谢谢你的建议。

根据您的需求,这里有一个使用c#的工作示例。对不起,我不是一个VB开发人员。

这里的想法是添加一个事件到您的UserControl1称为SelectedEvent。当ButtonNotify被点击时,我们将其Content设置为"Yes",并提高SelectedEvent

MainWindow订阅此事件,然后将设置其他按钮的适当状态。

MainWindow.xaml

<Window x:Class="SO.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Width="800"
Height="450">
<Grid>
<ListBox x:Name="MyListBox" />
</Grid>
</Window>

MainWindow.xaml.cs

using System;
using System.Windows;
namespace SO
{
public partial class MainWindow : Window
{
public MainWindow()
{
Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
for (var i = 0; i < 3; i++)
{
var testItem = new UserControl1
{
ButtonNotify =
{
Content = "Blank"
}
};
testItem.SelectedEvent += OnUserControl1Selected;

MyListBox.Items.Add(testItem);
}
}
private void OnUserControl1Selected(object sender, EventArgs e)
{
var sourceItem = sender as UserControl1;

foreach (var item in MyListBox.Items)
{
if (item is UserControl1 testItem && testItem != sourceItem)
{
testItem.ButtonNotify.Content = "No";
}
}
}
}
}

UserControl1.xaml

<UserControl x:Class="SO.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Button x:Name="ButtonNotify"
Click="ButtonNotify_OnClick" />
</Grid>
</UserControl>

UserControl1.xaml.cs

using System;
using System.Windows;
using System.Windows.Controls;
namespace SO
{
/// <summary>
/// Interaction logic for UserControl1.xaml
/// </summary>
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
private void ButtonNotify_OnClick(object sender, RoutedEventArgs e)
{
ButtonNotify.Content = "Yes";
SelectedEvent?.Invoke(this, EventArgs.Empty);
}
public delegate void SelectedEventHandler(object sender, EventArgs e);

public event EventHandler SelectedEvent;
}
}

最新更新