模板按钮在代码中重用

时间:2014-08-02 11:56:24

标签: c# wpf xaml

我很抱歉,如果这是非常明显的,但是自从我使用C#已经有好几年了,而且我似乎找不到正确的谷歌搜索术语。

我正在尝试在XAML中创建一个按钮模板,用于例如2x2网格。 此按钮必须添加到代码中,因为用户应该能够在运行时定义他想要的按钮数量。该按钮应包含另一个按钮和标签。

<Window x:Class="Soundboard.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="750" Width="1200">
<Window.Resources>
    <ControlTemplate x:Key="myButton" TargetType="Button">
            <Canvas x:Name="mainCanvas">
            <Button x:Name="childButton" Height="30" Width="30" HorizontalAlignment="Right" VerticalAlignment="Top">
                <Button.Background>
                    <ImageBrush ImageSource="Resources/picture.png"/>
                </Button.Background>
            </Button>
            <Label x:Name="nameLabel" Content="Label" HorizontalAlignment="Center" VerticalAlignment="Bottom"></Label>
            </Canvas>
    </ControlTemplate>
</Window.Resources>
<Grid x:Name="myGrid">
</Grid>

我可以通过在XAML myGrid(测试)

中添加此行来调用该按钮
    <Button Template="{StaticResource myButton}" Height="200" Width="200" Margin="300,0,0,0"></Button>
    <Button Template="{StaticResource smyButton}" Height="200" Width="200" Margin="0,0,0,0"></Button>

但我似乎无法找到在代码中添加该按钮的方法。这是我的尝试之一,不起作用:

Button b = (Button)FindResource("myButton");
b.SetValue(Grid.RowProperty, r); // r is int from row for loop
b.SetValue(Grid.ColumnProperty, c); // c is int from column for loop
myGrid.Children.Add(b);

但是b总是为空。有人能帮我吗?我猜我在XAML中使用了一些错误的方法,但我现在真的不知道。

2 个答案:

答案 0 :(得分:2)

myButton是一个ControlTemplate而不是当前在代码中访问的Button,因此您可以按如下方式修改代码

Button b = new Button();
b.Template = (ControlTemplate)FindResource("myButton");

所以在上面的示例中,您通过FindResource方法检索ControlTemplate并将其应用于新创建的按钮。

休息保持不变

答案 1 :(得分:-1)

喜欢这一行,它已在app.xaml文件中使用:

  <ResourceDictionary.ThemeDictionaries> 
            <ResourceDictionary x:Key="Default"> 
                <SolidColorBrush x:Key="ListBoxItemDisabledForegroundThemeBrush" Color="Transparent" /> 
                <SolidColorBrush x:Key="ListBoxItemPointerOverBackgroundThemeBrush" Color="Transparent" /> 
                <SolidColorBrush x:Key="ListBoxItemPointerOverForegroundThemeBrush" Color="#f7f6f6" /> 
                <SolidColorBrush x:Key="ListBoxItemPressedBackgroundThemeBrush" Color="Transparent" /> 
                <SolidColorBrush x:Key="ListBoxItemPressedForegroundThemeBrush" Color="#f7f6f6" /> 
                <SolidColorBrush x:Key="ListBoxItemSelectedBackgroundThemeBrush" Color="Transparent" /> 
                <SolidColorBrush x:Key="ListBoxItemSelectedDisabledBackgroundThemeBrush" Color="#66FFFFFF" /> 
                <SolidColorBrush x:Key="ListBoxItemSelectedDisabledForegroundThemeBrush" Color="#99000000" /> 
                <SolidColorBrush x:Key="ListBoxItemSelectedForegroundThemeBrush" Color="#f7f6f6" /> 
                <SolidColorBrush x:Key="ListBoxItemSelectedPointerOverBackgroundThemeBrush" Color="Transparent" /> 
                <SolidColorBrush x:Key="ListBoxBackgroundThemeBrush" Color="Transparent" /> 
                <SolidColorBrush x:Key="ListBoxBorderThemeBrush" Color="Transparent" /> 
                <SolidColorBrush x:Key="ListBoxDisabledForegroundThemeBrush" Color="#66FFFFFF" /> 
                <SolidColorBrush x:Key="ListBoxFocusBackgroundThemeBrush" Color="#f7f6f6" /> 
                <SolidColorBrush x:Key="ListBoxForegroundThemeBrush" Color="#f7f6f6" /> 

            </ResourceDictionary> 
相关问题