所以我使用Expression Blend来设计我的按钮。我创建了一个新按钮,通过删除按钮中的所有内容来编辑按钮的模板。然后我在其中添加了一个网格并命名为#34; grid"。在网格内部,我添加了一个文本块并将其称为" textBlock"。然后我在“应用程序”下保存了模板。
这是app.xaml文件中的内容。
<Style x:Key="CustomButtonStyle" TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="grid" HorizontalAlignment="Left" Height="40" VerticalAlignment="Top" Width="90">
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Margin="5,5,0,0" Height="25" Width="75" FontSize="17.333"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true"/>
<Trigger Property="IsMouseOver" Value="true"/>
<Trigger Property="IsPressed" Value="true"/>
<Trigger Property="IsEnabled" Value="false"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
基本上我打算做的是在运行时创建一个按钮,将这个样式应用于按钮,转到按钮的模板,然后更改按钮模板中文本块的text属性。
首先,对于初学者而言,我没有在运行时创建一个按钮,而是在编译时创建了一个按钮并命名为#34; customButton&#34;。然后我尝试编辑按钮模板的文本属性&#39;文本块,但遇到异常。
TextBlock tb = this.customButton.Template.FindName("textBlock", customButton) as TextBlock;
tb.Text = "ASDDDQWEQWEQWE";
请指教谢谢!
答案 0 :(得分:1)
创建一个按钮模板,就像您拥有的那样,并为每个项目添加控件:
<ControlTemplate TargetType="{x:Type Button}">
<StackPanel>
<Label Content="{Binding CompanyName}" />
<Image Source="{Binding Image}" />
<Label Content="{Binding StockChange}" />
</StackPanel>
</ControlTemplate>
或者您可以将其添加到按钮内容中:
<Button>
<Button.Content>
<StackPanel>
<Label Content="{Binding CompanyName}" />
<Image Source="{Binding Image}" />
<Label Content="{Binding StockChange}" />
</StackPanel>
</Button.Content>
</Button
创建class
以保存API中的数据:
public class CompanyInfo
{
public string CompanyName;
public ImageSource Image;
public string StockChange;
}
在代码隐藏或viewmodel中创建ObservableCollection<CompanyInfo>
以保存从API数据创建的CompanyInfo
个对象:
public ObservableCollection<CompanyInfo> CompanyInfoList = new ObservableCollection<CompanyInfo>();
创建ItemsControl
以从数据列表中创建按钮:
<ItemsControl ItemsSource="{Binding Path=CompanyInfoList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
//Button with Bindings Goes Here
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
和你的叔叔一样。我建议研究其中的一些内容,以便更好地理解它是如何工作的。
答案 1 :(得分:1)
我想创建一个代表公司股票信息的按钮 公司名称,形象和股票价格的百分比增加在一起 单按钮。因此,在运行时,生病从一个人获得前十大股票 外部API并在运行时使用信息创建10个按钮 将其添加到主窗口的堆栈面板中。
您需要将ListBox和ItemTempate用于此类场景。 请尝试以下代码。
tsc <filename>.ts