WPF。如何在c#

时间:2015-07-29 12:10:15

标签: c# wpf image textblock

我有我在代码后面设置的图像,现在我必须在代码后面的图片下设置3个文本,也许somenoe knoe如何制作它? 我的xaml:

 ...<Style x:Key="imageStyle" TargetType="{x:Type Image}">
                    <Setter Property="Height" Value="152px"/>
                    <Setter Property="Width" Value="762"/>
                </Style>
</windows.Resources>
<Grid>
         <StackPanel x:Name="StackStyle" Background="#FFFFFF" Margin="30,98,250,150">...

我的xaml.cs是:

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Loaded += OnLoaded;
        }

        private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
        {
            Style imgStyle = (Style)Resources["imageStyle"];
            var imag = new Image();
            imag.Style = imgStyle;
            string path = System.AppDomain.CurrentDomain.BaseDirectory + "../../ico.choose-coupon.png";
            imag.Source = new BitmapImage(new Uri(path));


            StackStyle.Children.Add(imag);

        }
    }

不要忘记这是一张图片,这些文字必须在格雷场下。

更新 我得到了我想要的东西,那就是代码: XAML:

<Viewbox Stretch="Fill">
        <Grid>
        <StackPanel Orientation="Vertical" x:Name="myStackPanel"  Background="#FFFFFF" Height="560" Width="968"  HorizontalAlignment="Center" >
            <Label  Style="{StaticResource Label}" ></Label>

        </StackPanel>    
    </Grid>
</Viewbox>

xaml.cs:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Loaded += OnLoaded;
        }

        private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
        {


            string path = System.AppDomain.CurrentDomain.BaseDirectory + "../../ico.choose-coupon.png";

            Style imgStyle = (Style)Resources["imageStyle"];

            var imag = new Image();
            imag.Style = imgStyle;
            imag.Source = new BitmapImage(new Uri(path));

            myStackPanel.Children.Add(imag);

            Style textStyle = (Style) Resources["textStyle"];
            var text1 = new TextBlock();
            var text2 = new TextBlock();
            var text3 = new TextBlock();



            text1.Style = textStyle;
            text2.Style = textStyle;
            text3.Style = textStyle;
            text1.Text = "% coupon";
            text2.Text = "Tara receipt";
            text3.Text = "Value coupon";
            text1.Margin = new Thickness(135,22,0,0);
            text2.Margin = new Thickness(210, 22, 0, 0);
            text3.Margin = new Thickness(188, 22, 0, 0);

            var TextPanel = new StackPanel();
            TextPanel.Orientation = Orientation.Horizontal;

            TextPanel.Children.Add(text1);
            TextPanel.Children.Add(text2);
            TextPanel.Children.Add(text3);

            myStackPanel.Children.Add(TextPanel);

        }
    }

2 个答案:

答案 0 :(得分:1)

您可以使用按钮样式。对于文本和图像,您可以设置与属性的绑定。也许你为按钮写了一个Style,看起来就像你的例子。

<Button>
     <StackPanel Orientation="Horizontal">
        <Image Source="{Binding Source}">
        <Label Padding="0" Text="{Binding YourText}"></Label>
     </StackPanel>
</Button>

答案 1 :(得分:0)

这是一个简单UserControl的例子: 将新的userControl模板添加到项目中。 我附加了一个带有TextBox和TextBlock的userControl示例:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="WpfApplication1.Example"
    x:Name="UserControl"
    d:DesignWidth="640" d:DesignHeight="480" Width="40" Height="40">

    <Grid x:Name="LayoutRoot" Width="40" Height="40" Background="White">
        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Test&#x9;" VerticalAlignment="Top" Height="14.32"/>
        <TextBox HorizontalAlignment="Left" Height="23" Margin="0,17,0,0" TextWrapping="Wrap" Text="Text" VerticalAlignment="Top" Width="40"/>
    </Grid>
</UserControl>

然后在你的窗口中,只需要调用你的userControl(你也可以将对象传递给它):

<local:Example HorizontalAlignment="Left" Margin="16.4,22.4,0,0" VerticalAlignment="Top"/>
<local:Example HorizontalAlignment="Left" Margin="16.4,22.4,0,0" VerticalAlignment="Top"/>
<local:Example HorizontalAlignment="Left" Margin="16.4,22.4,0,0" VerticalAlignment="Top"/>