如何在.txt文件中从现有字符串创建多个按钮

时间:2014-01-23 09:24:29

标签: c# wpf button browser

我想知道如何通过从.txt文件中读取行来在Toolbar中创建按钮。 例如:

//bookmarks.txt

http://example.com
http://example2.com
http://example3.com
...

我想要的是我的启动程序应该为我的.txt中的每一行创建一个按钮:

public void Button_Click(object sender, RoutedEventArgs e) //fire bookmark event
{
    string text = e.Source.ToString().Replace("System.Windows.Controls.Button: ", "");  
    WebBrowser1.Navigate(text);

}

更新

这就是我阅读.txt的方式:

for (int i = 0; i < File.ReadLines(@"bookmarks.txt").Count(); i++)
{
      //Add button right here
}

2 个答案:

答案 0 :(得分:1)

您正在尝试使用WPF,就好像它是WinForms一样。这就是您如何在WPF中满足您的要求...首先在您的DependencyProperty代码中创建一个Window集合,并用您的文本条目填充它:

public static DependencyProperty ItemsProperty = DependencyProperty.Register("Items", typeof(ObservableCollection<string>), typeof(YourWindowOrUserControl));

public ObservableCollection<string> Items
{
    get { return (ObservableCollection<string>)GetValue(ItemsProperty); }
    set { SetValue(ItemsProperty, value); }
}

...

Items = new ObservableCollection<string>(File.ReadLines(@"bookmarks.txt"));

然后,您只需将数据绑定到ToolBar.ItemsSource属性,并声明DataTemplate以定义每个string的外观...在您的情况下,我们将设置它作为Button中的文字:

<ToolBar ItemsSource="{Binding Items}">
    <ToolBar.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding}" Margin="1,0,0,0" />
        </DataTemplate>
    </ToolBar.ItemTemplate>
</ToolBar>

当然,您需要将Window.DataContext设置为具有属性的类...最简单的方法是在构造函数后面的代码中设置它:

public YourWindowOrUserControl
{
    InitializeComponent();
    DataContext = this;
}

必须阅读有关如何正确设置DataContext的信息,因为这样设置很容易,但不一定正确。

最后,您可以创建一个包含Button所有必需属性的类...例如,您可以添加名为Text的属性和另一个名为Command的属性,然后再创建您的Items财产是这些财产的集合。然后你可以像这样绑定数据:

<ToolBar ItemsSource="{Binding Items}">
    <ToolBar.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Text}" Command="{Binding Command}" Margin="1,0,0,0" />
        </DataTemplate>
    </ToolBar.ItemTemplate>
</ToolBar>

答案 1 :(得分:0)

您可以创建动态按钮并在飞行中添加点击事件:

Button btn = new Button();
btn.Location = new Point(yourX, yourY);
btn.Font = new Font(btn.Font.Name, 10);
btn.Text = "Text from your txt file here";
btn.ForeColor = Color.SeaShell; // choose color
btn.AutoSize = true;
btn.Click += (sender, eventArgs) =>
                {
                    string text = btn.Text.Replace("System.Windows.Controls.Button: ", "");  
                    WebBrowser1.Navigate(text);
                };

(在For.Btw中插入此代码,您可以将for替换为while。请参阅this链接)