Windows 8 metro应用程序:动态设置按钮样式。 C#和Xaml

时间:2014-09-10 13:23:04

标签: c# xaml

我有一个带有Gridview的xaml页面,它有一个Button.I我正在使用一个分组的Item页面。按钮是根据返回的数据集生成的。 10条记录将显示10个按钮。

        <GridView.ItemTemplate>
                        <DataTemplate>
                            <Grid HorizontalAlignment="Left" Width="Auto" Height="Auto"  >                      
                                <Button  Click="ItemView_ItemClick">
                                        <StackPanel Margin="5" >
                                        <TextBlock Tag="cntCustName" Style="{ThemeResource CntNormalTextBlockStyle}" Text="{Binding CUSTOMERNAME }"/>
                                        <TextBlock Tag="cntCatCode" Style="{ThemeResource CntLrgTextBlockStyle}" Text="{Binding CATEGORYCODE}"/>
                                        <TextBlock Tag="cntDay" Style="{ThemeResource CntNormalTextBlockStyle}" Text="{Binding DAY}"/>                               
                                    </StackPanel>
                                </Button>
                            </Grid>
                        </DataTemplate>
                    </GridView.ItemTemplate>

我在foreach循环中获取数据。我希望能够分配按钮的样式 动态地基于我的一些标准。

        foreach (ContactData ContactData in _openContatcs)
                    {
                        if (ContactData.CFLAG)
                        {
                            //this is an example
                            Application.Current.Resources["contactSquare"] = ampStyle;
                        }
                        group.Items.Add(ContactData);
                    }


        Styles are defined like this in a folder: Assests/Resources/BaseAPStyles.xaml

        <Style x:Name="contactSquare" TargetType="Button">
                <Setter Property="BorderBrush" Value="Transparent"/>
                <Setter Property="BorderThickness" Value="0"/>
                <Setter Property="Height" Value="160"/>
                <Setter Property="HorizontalAlignment" Value="Left"/>
                <Setter Property="Margin" Value="5"/>
                <Setter Property="VerticalAlignment" Value="Top"/>
                <Setter Property="Width" Value="160"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Grid Background="#ffffc600">
                                <ContentPresenter>
                                </ContentPresenter>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

我的按钮没有显示样式。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

使用x:key="contactSqaure"查找应用程序资源中的样式。

然后,访问您想要设置样式的按钮,并将样式分配给按钮,如下所示。

yourButton.Style = Application.Resources.Current["contactSqaure"] as Style;

您还可以在C#中定义样式,或编辑按钮的依赖项属性。

yourButton.Height = 160;
yourButton.VerticalAlignment = VerticalAlignment.Center;

您可以在加载时访问数据模板中的按钮。

<DataTemplate>
    <Button Loaded="Button_Loaded" .../>
....

void Button_Loaded(object sender, RoutedEventArgs args)
{
    (sender as Button).Style = yourStyle;
}