2016-06-30 16 views
2

我發現這個代碼: XAML:改變顏色按鈕,角落多面手

<Button Content="Click Me!" Margin="209,135,263.4,140.8" Background="{x:Null}" BorderBrush="{x:Null}" Click="Button_Click_1"> 
     <Button.Template> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border x:Name="bdr_main" CornerRadius="3" Margin="0" BorderThickness="1" BorderBrush="Black" Background="LightGray"> 
        <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" Margin="8,6,8,6" ContentSource="Content" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter TargetName="bdr_main" Property="Background" Value="LightGreen"/> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter TargetName="bdr_main" Property="Background" Value="Red"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 

這有可能改變背景顏色與WTF代碼? 我點擊了按鈕,背景顏色發生了變化。

使用正常的按鈕 我可以使用此代碼: bdr_main.Background = new SolidColorBrush(Colors.Red); 或 bdr_main.Background = Brushes.Red; 但他不工作 你能幫我嗎?

+0

更改邊框使用TemplateBinding而不是Background =「LightGray」 – kenny

+0

對不起 您的代碼工作 Thx很多 您是否有與WPF代碼相同的解決方案? – realiste

+0

你的Xaml看起來像WPF?編號 – kenny

回答

0

您可以使用一個切換按鈕,它的器isChecked財產

<ToggleButton Content="Click Me!" Margin="209,135,263.4,140.8"> 
    <ToggleButton.Template> 
     <ControlTemplate TargetType="{x:Type ToggleButton}"> 
      <Border x:Name="bdr_main" CornerRadius="3" Margin="0" 
        Background="LightGray" BorderThickness="1" BorderBrush="Black"> 
       <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" Margin="8,6,8,6" ContentSource="Content" /> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter TargetName="bdr_main" Property="Background" Value="LightGreen"/> 
       </Trigger> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter TargetName="bdr_main" Property="Background" Value="Red"/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </ToggleButton.Template> 
</ToggleButton> 

編輯

如果你想改變代碼的背景顏色的背後,你需要實現它的TemplateBinding

prop="{TemplateBinding Background} 

Stripp荷蘭國際集團的XAML到骨頭

<ToggleButton Click="Button_Click" Content="Click Me!" 
       Background="LightGray" Margin="209,135,263.4,140.8"> 
    <ToggleButton.Template> 
     <ControlTemplate TargetType="{x:Type ToggleButton}"> 
      <Border x:Name="bdr_main" CornerRadius="3" Margin="0" BorderThickness="1" BorderBrush="Black" 
        Background="{TemplateBinding Background}"> 
       <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" Margin="8,6,8,6" ContentSource="Content" /> 
      </Border> 
     </ControlTemplate> 
    </ToggleButton.Template> 
</ToggleButton> 

現在你可以

using System.Windows.Controls.Primitives; 

...

public void Button_Click(object sender, EventArgs e) 
{ 
    var butt = sender as ToggleButton; 
    if ((bool)butt.IsChecked) 
     butt.Background = Brushes.Red; 
    else 
     butt.Background = Brushes.LightGray; 
} 

鼠標懸停事件最好在ControlTemplate中處理,以獲得相同的行爲在我的第一篇文章中,您可以將其更改爲

<ControlTemplate TargetType="{x:Type ToggleButton}"> 
    <Border x:Name="bdr_main" CornerRadius="3" Margin="0" BorderThickness="1" BorderBrush="Black" 
      Background="{TemplateBinding Background}"> 
     <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" Margin="8,6,8,6" ContentSource="Content" /> 
    </Border> 
    <ControlTemplate.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="IsMouseOver" Value="True" /> 
       <Condition Property="IsChecked" Value="False" /> 
      </MultiTrigger.Conditions> 
      <MultiTrigger.Setters> 
       <Setter TargetName="bdr_main" Property="Background" Value="LightGreen" /> 
      </MultiTrigger.Setters> 
     </MultiTrigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+0

對不起你的代碼工作很多Thx你有WPF代碼的相同解決方案嗎? – realiste

+0

您好, 正是我想要的Thx爲您的 thx爲您的美妙幫助。 – realiste

0

編輯改爲每切換按鈕OP跟進

只是一個二傳手添加到您的觸發器。

 <ToggleButton Content="Click Me!" Margin="209,135,263.4,140.8" Background="{x:Null}" BorderBrush="{x:Null}" Click="Button_Click_1"> 
      <ToggleButton.Template> 
       <ControlTemplate TargetType="{x:Type ToggleButton}"> 
        <Border x:Name="bdr_main" CornerRadius="3" Margin="0" BorderThickness="1" BorderBrush="Black" Background="LightGray"> 
         <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" Margin="8,6,8,6" ContentSource="Content" /> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter TargetName="bdr_main" Property="Background" Value="LightGreen"/> 
         </Trigger> 
         <Trigger Property="IsChecked" Value="True"> 
          <Setter TargetName="bdr_main" Property="Background" Value="Red"/> 

          //Add line below 
          <Setter Property="Background" Value="Red" /> 

         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </ToggleButton.Template> 
     </ToggleButton> 

編輯 您不再需要這樣做

如果你想做到這一點在後面的代碼的單擊事件處理程序;注意此行爲與上面的觸發器不同,背景將保持紅色。

Button_Click_1(sender, e) 
{ 
    ((Button)sender).Background = Colors.Red; 
+0

Thx爲您的幫助,但它是相同的,我搜索了一個解決方案與wpf代碼爲例: 按鈕名稱與.Background =新SolidColorBrush(Colors.Blue); 但是WPF不認可名字bdr_main – realiste

+0

你能描述一下它不工作嗎?當你按下按鈕時,它不會變紅?鬆開鼠標後,顏色會變回淺灰色。鬆開按鈕後,您是否想讓顏色保持紅色? – user2880486

+0

這是相同的,因爲當我點擊按鈕單擊紅色出現,但在淺灰色的回 爲您的代碼 這是可能的 我想紅色留在我點擊按鈕 我搜索了可能在同一個按鈕或其他按鈕上更改顏色的代碼。 也許這對於WPF代碼來說更簡單嗎? – realiste