2010-09-03 266 views
1

我只想问我应该怎么把我的形象(动态)在这下面的代码:WPF/C#:创建按钮样式:文字+图片

<Style x:Key="ButtonStyler" TargetType="{x:Type Button}"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <RadialGradientBrush> 
       <RadialGradientBrush.GradientStops> 
        <GradientStopCollection> 
         <GradientStop Color="black" Offset="0" /> 
         <GradientStop Color="black" Offset="1" /> 
        </GradientStopCollection> 
       </RadialGradientBrush.GradientStops> 
      </RadialGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Height" Value="40" /> 
    <Setter Property="Foreground" Value="white" /> 
    <Setter Property="Grid.Row" Value="2" /> 
    <Setter Property="Grid.Column" Value="3" /> 
    <Setter Property="Content" Value="Forgot your password?" /> 
    <Setter Property="ContentTemplate" 
      Value="{DynamicResource myContentTemplate}" /> 
    <Setter Property="Margin" Value="3" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Grid> 
        <Rectangle x:Name="GelBackground" 
          Opacity="1" 
          RadiusX="9" 
          RadiusY="9" 
          Fill="{TemplateBinding Background}" 
          StrokeThickness="0.35"> 
         <Rectangle.Stroke> 
          <LinearGradientBrush StartPoint="0,0" 
            EndPoint="0,1"> 
           <LinearGradientBrush.GradientStops> 
            <GradientStopCollection> 
             <GradientStop Color="white" 
               Offset="0" /> 
             <GradientStop Color="#666666" 
               Offset="1" /> 
            </GradientStopCollection> 
           </LinearGradientBrush.GradientStops> 
          </LinearGradientBrush> 
         </Rectangle.Stroke> 
        </Rectangle> 
        <Rectangle x:Name="GelShine" 
       Margin="2,2,2,0" 
       VerticalAlignment="top" 
       RadiusX="6" 
       RadiusY="6" 
       Opacity="1" 
       Stroke="transparent" 
       Height="15px"> 
        <Rectangle.Fill> 
         <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
          <LinearGradientBrush.GradientStops> 
           <GradientStopCollection> 
            <GradientStop Color="#ccffffff" 
             Offset="0" /> 
            <GradientStop Color="transparent" 
             Offset="1" /> 
            </GradientStopCollection> 
           </LinearGradientBrush.GradientStops> 
          </LinearGradientBrush> 
         </Rectangle.Fill> 
        </Rectangle> 
        <ContentPresenter x:Name="GelButtonContent" 
          VerticalAlignment="center" 
          HorizontalAlignment="center" 
          Content="{TemplateBinding Content}" /> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter Property="Fill" TargetName="GelBackground"> 
          <Setter.Value> 
           <RadialGradientBrush> 
            <RadialGradientBrush.GradientStops> 
             <GradientStopCollection> 
              <GradientStop Color="lime" 
                Offset="0" /> 
              <GradientStop Color="DarkGreen" 
                Offset="1" /> 
             </GradientStopCollection> 
            </RadialGradientBrush.GradientStops> 
           </RadialGradientBrush> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="true"> 
         <Setter Property="Fill" TargetName="GelBackground"> 
          <Setter.Value> 
           <RadialGradientBrush> 
            <RadialGradientBrush.GradientStops> 
             <GradientStopCollection> 
              <GradientStop Color="#ffcc00" 
                Offset="0" /> 
              <GradientStop Color="#cc9900" 
                Offset="1" /> 
             </GradientStopCollection> 
            </RadialGradientBrush.GradientStops> 
           </RadialGradientBrush> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="true"> 
      <Setter Property="Foreground" Value="black " /> 
     </Trigger> 
     <Trigger Property="IsPressed" Value="true"> 
      <Setter Property="Foreground" Value="black " /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

我计划设置图像的文件目的地在我的代码隐藏(C#)中。对于输出,WPF按钮可以同时显示文本和图像(放置在文本的右侧)

有什么建议吗?

回答

4

您的模板包含一个ContentPresenter,它绑定到Button的内容。因此,您可以简单地将图像和/或文本设置为按钮的内容,并且它们将会到达那里。

<Button Style="{StaticResource ButtonStyler}"> 
    <StackPanel Orientation="Horizontal"> 
     <Image Source="..." /> 
     <TextBlock Text="..." /> 
    </StackPanel> 
</Button> 
+0

有没有一种方法我可以设置的.cs图像源( C#)? – abramlimpin 2010-09-03 22:47:14

+0

是的,创建一个ImageSource实例,将其Source属性设置为所需的图像,并将Image的Source属性设置为ImageSource实例。 – Timores 2010-09-05 10:25:15