2011-04-26 34 views
7

我想知道是否有可能做到以下幾點:使用圖像作爲WPF按鈕圖標掩碼?

  • 創建黑白圖像,說狗的
  • 圖像添加到按鈕作爲掩模
  • 變化使用(數據)觸發器的風格,例如禁用 - 狗灰色,「加載」 - 狗是紅色的,「準備好」狗是黃色等

基本上我想創建使用像素的按鈕圖標,但能夠在運行時設置顏色取決於觸發器。事情是這樣的:

dog buttons

回答

9

2小時後,谷歌搜索在這裏就是答案

<Window x:Class="IconTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <!-- button style --> 
     <Style x:Key="ToolButton" TargetType="Button"> 
      <Setter Property="OverridesDefaultStyle" Value="True"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Border Width="16" Height="16" Background="#ffbbbbbb"> 
          <Rectangle Name="rect" Fill="Black" OpacityMask="{TemplateBinding Content}"/> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter TargetName="rect" Property="Fill" Value="Green" /> 
          </Trigger> 
          <Trigger Property="IsPressed" Value="True"> 
           <Setter TargetName="rect" Property="Fill" Value="Yellow" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

    </Window.Resources> 
    <Grid> 
     <Button Width="16" Height="16" Style="{StaticResource ToolButton}"> 
      <ImageBrush ImageSource="/test.png"/> 
     </Button> 
    </Grid> 
</Window> 
+0

如果將其標記爲答案將會很好! – Rohit 2011-04-27 06:40:58

+1

有時間限制,我還沒有標記。 – DaveO 2011-04-28 03:35:47

0

在我看來,你不需要在WPF創建圖像掩碼來實現您的要求。您可以簡單地編輯按鈕類的控件模板。

請參閱本頁面的橢圓按鈕示例Control Template

然後,您可以使用觸發器簡單地更改該形狀的填充顏色。 Trigger

乾杯,

+0

我需要使用的圖像設置圖標,因爲我需要更多的比幾何形狀。 – DaveO 2011-04-26 20:31:22

2

可以定義爲ButtonOpacityMask。我相信你可以添加觸發器(如果你需要它們)來改變Button的Background

enter image description here

樣品:

<Button Height="100" Width="100" Background="Green"> 
    <Button.OpacityMask> 
    <DrawingBrush AlignmentX="Left" AlignmentY="Top"> 
     <DrawingBrush.Drawing> 
     <DrawingGroup> 
      <GeometryDrawing Brush="#33000000"> 
      <GeometryDrawing.Geometry> 
       <RectangleGeometry Rect="0,0,40,40" /> 
      </GeometryDrawing.Geometry> 
      </GeometryDrawing> 
      <GeometryDrawing Brush="#FF000000"> 
      <GeometryDrawing.Geometry> 
       <RectangleGeometry Rect="10,10,20,20"> 
       <RectangleGeometry.Transform> 
        <RotateTransform Angle="45" CenterX="20" CenterY="20" /> 
       </RectangleGeometry.Transform> 
       </RectangleGeometry> 
      </GeometryDrawing.Geometry> 
      </GeometryDrawing> 
     </DrawingGroup> 
     </DrawingBrush.Drawing> 
    </DrawingBrush> 
    </Button.OpacityMask> 
</Button>