【问题标题】:how to Change "source" of a user defined style Programmatically如何以编程方式更改用户定义样式的“来源”
【发布时间】:2011-08-25 18:30:39
【问题描述】:

我对 .Net、C# 和 WP7 非常陌生,但我也在做同样的事情。我需要从后面的代码 (C#) 创建一组“按钮”。每个按钮都有一个文本块和一个图片,但文本块的文本和图片的来源会有所不同。对于 rach 按钮。所以我创建了一个具有文本块和图像的样式样式。现在需要在创建按钮时将 text 设置为 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>

//后面的代码

请帮助我如果我做错了什么请告诉我

【问题讨论】:

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


    【解决方案1】:

    像往常一样,有多种方法......您可以做的一件事是,这取决于您的需要。您创建一个包含您的信息的类,例如

    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 设置到Buttons 上,现在通过DataBinding 我们将ButtonInfo 中的数据放入我们的控件中。 我还添加了 Command 属性,因为我认为这将是你下一件可以绊倒的事情。哪个可以修复,添加

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

    到您的按钮样式。

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

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

    希望对您有所帮助。

    【讨论】:

    • 感谢您的建议。现在它的工作,但仅适用于文本框而不是图像。
    • 实际上,Tesblocks 的文本在 rutime 时会发生变化,但对于 Image,它没有显示任何内容。如果你有任何 idaea 什么样的错误,请告诉我
    • @Dheeraj 现在可以用了吗?因为如果您的问题得到解决,请将帮助您的答案标记为已接受的答案。
    猜你喜欢
    • 1970-01-01
    • 2010-09-11
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多