我想知道如何通过从.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
}
答案 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链接)