如何在运行时编辑WPF按钮

如何在运行时编辑WPF按钮,wpf,templates,expression-blend,Wpf,Templates,Expression Blend,所以我用Expression Blend来设计我的按钮。我创建了一个新按钮,通过删除其中的所有内容来编辑按钮的模板。然后我在其中添加了一个网格,并将其命名为“网格”。在网格内部,我添加了一个textblock,并称之为“textblock”。然后我将模板保存在应用程序下 这是app.xaml文件中的内容。 请告知,谢谢 创建一个按钮模板,就像您拥有的那样,并为每个项目添加控件: <ControlTemplate TargetType="{x:Type Button}">

所以我用Expression Blend来设计我的按钮。我创建了一个新按钮,通过删除其中的所有内容来编辑按钮的模板。然后我在其中添加了一个网格,并将其命名为“网格”。在网格内部,我添加了一个textblock,并称之为“textblock”。然后我将模板保存在应用程序下

这是app.xaml文件中的内容。


请告知,谢谢

创建一个按钮模板,就像您拥有的那样,并为每个项目添加控件:

<ControlTemplate TargetType="{x:Type Button}">
                <StackPanel>
                    <Label Content="{Binding CompanyName}" />
                    <Image Source="{Binding Image}" />
                    <Label Content="{Binding StockChange}" />
                </StackPanel>
</ControlTemplate>
在code behind或viewmodel中创建一个
ObservableCollection
,以保存从API数据创建的
CompanyInfo
对象:

public ObservableCollection<CompanyInfo> CompanyInfoList = new ObservableCollection<CompanyInfo>();

还有你叔叔。我建议研究其中的一些东西,以便更好地了解它的工作原理。

创建一个按钮模板,就像您拥有的那样,并为每个项目添加控件:

<ControlTemplate TargetType="{x:Type Button}">
                <StackPanel>
                    <Label Content="{Binding CompanyName}" />
                    <Image Source="{Binding Image}" />
                    <Label Content="{Binding StockChange}" />
                </StackPanel>
</ControlTemplate>
在code behind或viewmodel中创建一个
ObservableCollection
,以保存从API数据创建的
CompanyInfo
对象:

public ObservableCollection<CompanyInfo> CompanyInfoList = new ObservableCollection<CompanyInfo>();
还有你叔叔。我建议研究其中一些东西,以便更好地了解它是如何工作的


我想创建一个按钮来表示公司股票信息,如 公司名称、形象和股价上涨百分比合一 单按钮。因此,在运行时,我将从 外部API,并在运行时创建10个按钮,其中包含信息和 将其添加到我的主窗口中的stackpanel

对于这种情况,您需要使用ListBox和ItemTempate。 请尝试下面的代码

 <ListBox x:Name="lstBox">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Button>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding CompanyName}" Margin="0,0,10,0"/>
                        <TextBlock Text="{Binding Percent}" />
                    </StackPanel>
                </Button>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        ObservableCollection<CompanyModel> companies = new ObservableCollection<CompanyModel>();
        for (int i = 0; i < 10; i++)
        {
            CompanyModel companyModel = new CompanyModel()
            {
                Percent = i,
                CompanyName = "Name" + i
            };
            companies.Add(companyModel);
        }
        lstBox.ItemsSource = companies;
    }
}

class CompanyModel
    {
        public int Percent { get; set; }
        public string CompanyName { get; set; }
    }

公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
ObservableCollection Companys=新的ObservableCollection();
对于(int i=0;i<10;i++)
{
CompanyModel CompanyModel=新CompanyModel()
{
百分比=i,
CompanyName=“Name”+i
};
companys.Add(companyModel);
}
lstBox.ItemsSource=公司;
}
}
类公司模型
{
公共整数百分比{get;set;}
公共字符串CompanyName{get;set;}
}

我想创建一个按钮来表示公司股票信息,如 公司名称、形象和股价上涨百分比合一 单按钮。因此,在运行时,我将从 外部API,并在运行时创建10个按钮,其中包含信息和 将其添加到我的主窗口中的stackpanel

对于这种情况,您需要使用ListBox和ItemTempate。 请尝试下面的代码

 <ListBox x:Name="lstBox">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Button>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding CompanyName}" Margin="0,0,10,0"/>
                        <TextBlock Text="{Binding Percent}" />
                    </StackPanel>
                </Button>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        ObservableCollection<CompanyModel> companies = new ObservableCollection<CompanyModel>();
        for (int i = 0; i < 10; i++)
        {
            CompanyModel companyModel = new CompanyModel()
            {
                Percent = i,
                CompanyName = "Name" + i
            };
            companies.Add(companyModel);
        }
        lstBox.ItemsSource = companies;
    }
}

class CompanyModel
    {
        public int Percent { get; set; }
        public string CompanyName { get; set; }
    }

公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
ObservableCollection Companys=新的ObservableCollection();
对于(int i=0;i<10;i++)
{
CompanyModel CompanyModel=新CompanyModel()
{
百分比=i,
CompanyName=“Name”+i
};
companys.Add(companyModel);
}
lstBox.ItemsSource=公司;
}
}
类公司模型
{
公共整数百分比{get;set;}
公共字符串CompanyName{get;set;}
}

如果用户必须将模板分解为简单的文本更改,则该模板不是非常有用。默认按钮模板使用
ContentPresenter
显示任意内容(这不是必需的文本!!)。如果您希望在运行时动态地更改文本框的内容,请考虑将<代码>文本<代码>字段绑定到属性,然后修改代码中的属性。我想创建一个按钮来表示公司的股票信息,如公司名称、图像和股票价格的增加,都在一个按钮中。因此,在运行时,我将从外部API中获取前10个股票,并在运行时使用这些信息创建10个按钮,然后将其添加到主窗口中的stackpanel中。你可以给我建议或给我一个简单的示例谢谢你可以创建一个custombutton,它有三个公司名称、图像和百分比的依赖属性,并用于不同的公司介意给我一个示例@Ayyappansubramanian如果用户必须将其分解为简单的更改文本,它不是非常有用的模板。默认按钮模板使用
ContentPresenter
显示任意内容(这不是必需的文本!!)。如果您希望在运行时动态地更改文本框的内容,请考虑将<代码>文本<代码>字段绑定到属性,然后修改代码中的属性。我想创建一个按钮来表示公司的股票信息,如公司名称、图像和股票价格的增加,都在一个按钮中。因此,在运行时,我将从外部API中获取前10个股票,并在运行时使用这些信息创建10个按钮,然后将其添加到主窗口中的stackpanel中。您可以给我建议或给我一个简单的示例谢谢您可以创建一个custombutton,它具有公司名称、图像和百分比的三个依赖属性,并用于不同的公司介意给我一个示例@AyyappanSubramanian吗
<ItemsControl ItemsSource="{Binding Path=CompanyInfoList}">

    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <ItemsControl.ItemTemplate>
        <DataTemplate>

            //Button with Bindings Goes Here

        </DataTemplate>
    </ItemsControl.ItemTemplate>

</ItemsControl>
 <ListBox x:Name="lstBox">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Button>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding CompanyName}" Margin="0,0,10,0"/>
                        <TextBlock Text="{Binding Percent}" />
                    </StackPanel>
                </Button>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        ObservableCollection<CompanyModel> companies = new ObservableCollection<CompanyModel>();
        for (int i = 0; i < 10; i++)
        {
            CompanyModel companyModel = new CompanyModel()
            {
                Percent = i,
                CompanyName = "Name" + i
            };
            companies.Add(companyModel);
        }
        lstBox.ItemsSource = companies;
    }
}

class CompanyModel
    {
        public int Percent { get; set; }
        public string CompanyName { get; set; }
    }