如何以编程方式更改用户定义样式的“源”

时间:2011-08-25 05:51:53

标签: c# windows-phone-7 silverlight-4.0

我对.Net,C#和WP7很新,但同样如此。我需要从后面的代码(C#) 创建一个“按钮” 数组。每个按钮都有一个文本块和一个图片,但Textblock和图片源的文本将是diff。对于rach按钮。所以我创建了一个具有文本块和图像的样式。现在需要在创建按钮时将文本设置为TextBlock,将imageSource设置为Image。请帮我提供示例代码,因为我在过去3天内尝试这个,但找不到解决方案,或者遗漏了一些基本技术。

<phone:PhoneApplicationPage.Resources>
        <Style x:Name="style" x:Key="UnChecked" TargetType="Button" >
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button" >
                        <Canvas x:Name="list" >
                            <TextBlock x:Name="Site" **Text=""** TextWrapping="NoWrap" Canvas.Top="104" Width="114" Height="48" Foreground="White" FontWeight="Bold" FontSize="24" VerticalAlignment="Top" CacheMode="BitmapCache" Canvas.Left="16" />
                            <Image x:Name="Logo" Width="128" Height="104"  UseLayoutRounding="True" **Source=""** />                            
                        </Canvas>                        
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </phone:PhoneApplicationPage.Resources>

//代码隐藏

请帮助我让我知道如果我犯了一些错误

1 个答案:

答案 0 :(得分:0)

有许多方法,像往常一样......根据您的需要,您可以做的一件事是。您创建一个包含

等信息的类
public class ButtonInfo
{
    public string Text{get;set;}
    public BitmapSource Image {get;set;}
    public ICommand Command{get;set;}
}

现在,当您创建按钮时

var btn = new Button();
vat info = new ButtonInfo();
info.Text ="Some caption";
// load an image
BitmapImage myBitmapImage = new BitmapImage();
myBitmapImage.BeginInit();
myBitmapImage.UriSource = new Uri(@"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Water Lilies.jpg");
myBitmapImage.EndInit();
// set the image
info.Image = myBitmapImage;

// set the button info onto our button

btn.DataContext = info;

现在你需要修改你的风格

<Canvas x:Name="list" >
  <TextBlock x:Name="Site" Text="{Binding Text}" />
  <Image x:Name="Logo" Width="128" Height="104" Source="{Binding Image}" />                            
</Canvas>   

那我们在这做什么?我们创建了一个对象,将按钮的动态信息保存到ButtonInfo,在创建按钮时,我们将这些单独的ButtonInfos设置到按钮上,现在通过DataBinding,我们将ButtonInfo中的数据导入到我们的控件中。 我添加了Command属性,因为我认为这将是你可以解决的下一个问题。哪个可以修复,添加

<Setter Property="Command" Value="{Binding Command}"/>

按钮样式。

就像我说的,这只是一种方法,而不是最好的方式。但这可能就足够了。

另外我需要补充一点,我来自WPF背景,有些东西可能在silverlight中有所不同,但我猜这些基本概念都是一样的。

希望有所帮助。