现在我有多个按钮和其他元素。其中每个都有一个x:名称和一个内容。
我还有一个列表,其中包含与x:WPF部件名称相同的元素。
我的目标是拥有一个可以反复调用的函数,给它一个元素的x:name,并设置列表中名称后面的值({name1,value,name2,value,name3, value ..})到具有该名称的WPF元素的内容。
例如:
我有一个清单:
config {tree,1,chair,4,window,3,dollar,200}
<Button x:Name="chair" Content="12"/>
<Button x:Name="tree" Content="5"/>
现在我想调用一个函数,给它配置{}和x:Name =&#34; chair&#34;。 它应该搜索一个元素&#34; chair&#34;现在在配置中,然后用内容中的12替换4。 现在我想用下一个Button(x:Name =&#34; tree&#34;)来调用它来将值1更改为5;
我真的不知道,如何正确描述:(
这是我现在的功能:
public void SetConfig(List<string> config, string name)
{
config[config.IndexOf(name) + 1] = myWindow.name.Content.ToString();
}
myWindow.NAME.Content.ToString();部分不起作用,因为我不能使用变量。
有什么办法,我还能这样做吗?
提前致谢:D
答案 0 :(得分:0)
您可以通过从绑定到多个按钮的Click事件转换发件人来访问按钮属性。像这样:
private void Click(object sender, RoutedEventArgs e)
{
Title = ((Button) sender).Name;
}
答案 1 :(得分:0)
这个例子适合我。您必须在WPF表单上为您的Container命名(例如:网格), 并使用方法“FindName(string)”,如下所示:
XAML:
<Grid Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button x:Name="chair" Content="12" Grid.Column="0" Click="chair_Click"/>
<Button x:Name="tree" Content="5" Click="tree_Click" Grid.Column="1"/>
</Grid>
代码背后:
public partial class MainWindow : Window
{
List<string> config = new List<string>() { "tree", "1", "chair", "4", "window", "3", "dollar", "200" };
public MainWindow()
{
InitializeComponent();
}
private void tree_Click(object sender, RoutedEventArgs e)
{
SetConfig(config, this.tree.Name);
}
private void chair_Click(object sender, RoutedEventArgs e)
{
SetConfig(config, this.chair.Name);
}
public void SetConfig(List<string> config, string name)
{
config[config.IndexOf(name) + 1] = ((Button)LayoutRoot.FindName(name)).Content.ToString();
}
}
注意:如果使用MVVM模式,则无法使用。
希望它有所帮助。
答案 2 :(得分:0)
您好像使用的是List<T>
,就像它是KeyValuePair
提供商一样,请尝试将List<T>
替换为Dictionary<T, U>
。
此外,您可以在code-behind
中使用单一方法管理所有Button
OnClick
events
,这样您就不必添加新的OnClick
每个额外Button
的处理程序。
<强> MainWindow.xaml 强>
<Window x:Class="SO.Q_27171497.Wpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Button x:Name="chair" Content="12" Click="Button_OnClick"/>
<Button x:Name="tree" Content="5" Click="Button_OnClick"/>
</StackPanel>
</Window>
<强> MainWindow.xaml.cs 强>
namespace SO.Q_27171497.Wpf
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
public partial class MainWindow
{
private readonly Dictionary<string, int> config = new Dictionary<string, int>
{
{"tree", 1},
{"chair", 4},
{"window", 3},
{"dollar", 200}
};
public MainWindow()
{
this.InitializeComponent();
}
private void Button_OnClick(object sender, RoutedEventArgs e)
{
var button = sender as Button;
if (button == null)
{
return;
}
button.Content = this.config.FirstOrDefault(c => String.CompareOrdinal(button.Name, c.Key) == 0).Value;
}
}
}