我有三个ListBoxes
和三个'清除'buttons
,其中一个Listboxes
。现在,我将所有'clear'buttons
链接到相同的click-function。在该函数中,我使用switch
来确定要清除哪个ListBox
。我想知道是否有办法摆脱switch
语句并用一行代码来替换它,以确定要清除哪个ListBox
。我需要将每个button
与相应的ListBox
相关联的内容。我弄乱了Tag
的{{1}}属性,但那里没有运气。
以下是目前的代码:
Xaml(ClearBtn1清除lb1等):
Buttons
代码背后:
<Button Name="ClearBtn1"
Click="ClearBtn_Click"
Content="Clear" />
<Button Name="ClearBtn2"
Click="ClearBtn_Click"
Content="Clear" />
<Button Name="ClearBtn3"
Click="ClearBtn_Click"
Content="Clear" />
<ListBox Name="lb1" />
<ListBox Name="lb2" />
<ListBox Name="lb3" />
使用private void ClearBtn_Click(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
string name = btn.Name; //Gets the button name which corresponds to a certain listbox
switch (name)
{
case "ClearBtn1":
{ ClearListBox(lb1); return; }
case "ClearBtn2":
{ ClearListBox(lb2); return;}
case "ClearBtn3":
{ ClearListBox(lb3); return; }
}
}
public void ClearListBox(ListBox listbox)
{
listbox.Items.Clear();
}
,我尝试的是:
Tag
这不起作用,因为我无法将<Button Name="ClearBtn1"
Click="ClearBtn_Click"
Content="Clear"
Tag="lb1" />
private void ClearBtn_Click(object sender, Rout
{
Button btn = (Button)sender;
string name = btn.Name;
ClearListBox(btn.Tag); //doesn't work
}
转换为string
。
答案 0 :(得分:2)
尝试将元素绑定到标记,而不仅仅是字符串:
<Button Name="ClearBtn1"
Click="ClearBtn_Click"
Content="Clear"
Tag="{Binding ElementName=lb1}"/>
答案 1 :(得分:1)
我修改了你的代码以获得预期的结果。
<Button Tag="{Binding ElementName=lb1}" Name="ClearBtn1"
Click="ClearBtn_Click"
Content="Clear" />
<Button Tag="{Binding ElementName=lb2}" Name="ClearBtn2"
Click="ClearBtn_Click"
Content="Clear" />
<Button Tag="{Binding ElementName=lb3}" Name="ClearBtn3"
Click="ClearBtn_Click"
Content="Clear" />
<ListBox Name="lb1" />
<ListBox Name="lb2" />
<ListBox Name="lb3" />
并修改了ClearBtn_Click,如下所示
private void ClearBtn_Click(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
var list = btn.Tag as ListBox;
ClearListBox(list);
}
答案 2 :(得分:1)
你可以这样做。
将listBox保存在ListBox类型的List中。 喜欢
List<ListBox> listBoxes = new List<ListBox>();
listBoxes.Add(lb1);
listBoxes.Add(lb2);
listBoxes.Add(lb3);
并将索引号作为命令参数放在每个按钮
上<Button Name="ClearBtn1"
Click="ClearBtn_Click"
Content="Clear"
CommandParameter="0" />
<Button Name="ClearBtn2"
Click="ClearBtn_Click"
Content="Clear"
CommandParameter="1"/>
<Button Name="ClearBtn3"
Click="ClearBtn_Click"
Content="Clear"
CommandParameter="2" />
然后在按钮单击功能
中private void ClearBtn_Click(object sender, Rout
{
Button btn = (Button)sender;
int index = int.Parse(btn.CommmandParamter);
ClearListBox(index);
}
现在,您的ClearListBox函数将接收索引作为参数而不是列表框。
public void ClearListBox(int index)
{
listBoxes[index].Items.Clear();
}
希望能解决您的问题。