2016-03-01 59 views
1

我正在嘗試爲某些按鈕創建樣式,起初我爲按鈕製作了一種樣式,但隨後我需要在它們中有一個圖標,以便將圖標放入樣式中。在xaml中設計一個按鈕

但是,這是不是要走的路,我無法得到按鈕中的圖標,但不符合風格。

代碼風格:在元素

<Style x:Name="stlBtnOpen" x:Key="stlBtnOpen" TargetType="Button"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border x:Name="borderBtnOpen" CornerRadius="10" BorderBrush="DarkGray" BorderThickness="1" Background="Transparent"> 
         <Grid Background="{DynamicResource AccentColorBrush}" Margin="6"> 
          <Grid.OpacityMask> 
           <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_folder}"/> 
          </Grid.OpacityMask> 
         </Grid> 
        </Border> 
        <ControlTemplate.Triggers> 
         //some events 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
</Style> 

代碼:

<Button Grid.Column="2" x:Name="btnOpen" Click="btnOpen_Click"> 
     <Border x:Name="borderBtnOpen" CornerRadius="10" BorderBrush="DarkGray" BorderThickness="1" Background="Transparent"> 
      <Grid Background="{DynamicResource AccentColorBrush}" Margin="6"> 
       <Grid.OpacityMask> 
        <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_folder}"/> 
       </Grid.OpacityMask> 
      </Grid> 
     </Border> 
</Button> 
+1

ÿ你似乎沒有在你的按鈕上使用你的風格。爲什麼一個風格的圖標「不是要走」? – Default

+0

哦,不,我看...這是一個誤解...風格是我怎麼做的第一,這樣的作品,但後來我試圖把圖標(在VisualBrush)在按鈕本身,第二塊代碼。 並不是風格的想法,能夠在多個按鈕上使用它?我想使用大約5個不同按鈕的樣式,但所有按鈕上都有不同的圖標。 –

回答

2

*你有沒有嘗試把圖像在你把你按鈕的內容電網:

<Button Grid.Column="2" x:Name="btnOpen" Click="btnOpen_Click"> 
     <Border x:Name="borderBtnOpen" CornerRadius="10" BorderBrush="DarkGray" BorderThickness="1" Background="Transparent"> 
      <Grid Background="{DynamicResource AccentColorBrush}" Margin="6"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <Rectangle Grid.Column="0"> 
        <Rectangle.Fill> 
         <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_folder}"/> 
        </Rectangle.Fill> 
       </Rectangle> 
       <Textblock Grid.Column="1"/> 
      </Grid> 
     </Border> 
</Button> 

從內存中獲得,但它不應該離你所需要的太遠(你也可以替換gridstackpanel,將減少從列定義樣板)

啊,如果你想擁有的東西在你的按鈕:)

編輯不要忘記東西放在正文塊: 那麼這是爲我工作,但有一個使用刷子來填補另一個對象的固有問題的轎跑車。

但首先這裏是EXACT工作標記

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Width="525" 
     Height="350"> 
    <Grid> 
     <Button x:Name="btnOpen" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Click=""> 
      <Border x:Name="borderBtnOpen" 
        Background="Transparent" 
        BorderBrush="DarkGray" 
        BorderThickness="1" 
        CornerRadius="10"> 
       <Grid Margin="6" 
         HorizontalAlignment="Stretch" 
         VerticalAlignment="Stretch" 
         Background="{DynamicResource AccentColorBrush}"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="Auto" /> 
        </Grid.ColumnDefinitions> 
        <Rectangle Grid.Column="0" Width="20px"> 
         <Rectangle.Fill> 
          <SolidColorBrush Color="Blue"/> 
         </Rectangle.Fill> 
        </Rectangle> 
        <TextBlock Grid.Column="1" Text="bonjour"/> 
       </Grid> 
      </Border> 
     </Button> 
    </Grid> 
</Window> 

有2個問題在這裏:

  • 邊境本身不會延伸到按鈕的大小(你可以,如果你看到它強制按鈕的真正需要的寬度更大)
  • 您將不得不手動定義矩形的大小(刷子只填充並且沒有定義它的大小)否則,您將有ar用0像素尺寸在屏幕上

對於中印邊界問題有效地不存在ectangle,你可能想看看這是什麼question的OP沒有(以下鏈接,因爲相關的文檔也着墨)

EDIT2

改變了上面的代碼,使矩形可以看到當Border足夠大(你仍然可以參考鏈接的問題對中印邊界問題)

+0

圖標不是圖像,它是在VisualBrush中,這樣我就可以輕鬆地更改顏色,而無需製作許多不同的圖標 –

+0

然後將'Image'更改爲'Rectangle'並檢查此問題:http:/ /堆棧溢出。COM /問題/ 14819872 /設定圖像運行時在-visualbrush-與-C-尖銳。你也可以刪除'Grid.OpacityMask' – Sidewinder94

+0

@WimVanLaer編輯的代碼片段,應該更好:) – Sidewinder94