2016-04-26 74 views
2

對於定製着想的消息框的風格,我用這個工具包,我從它的官方網頁複製樣式代碼:WPF - 自定義消息框的樣式在擴展WPF工具包

http://wpftoolkit.codeplex.com/wikipage?title=MessageBox&referringTitle=Documentation

我改變這一點:

<Application x:Class="TotaraEditor.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:TotaraEditor" 
      xmlns:toolkit="http://schemas.xceed.com/wpf/xaml/toolkit" 
      StartupUri="MainWindow.xaml" 
      ShutdownMode="OnMainWindowClose"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Themes/MetroDark/MetroDark.MSControls.Core.Implicit.xaml" /> 
       <ResourceDictionary Source="Themes/MetroDark/MetroDark.MSControls.Toolkit.Implicit.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 

      <SolidColorBrush x:Key="MyButtonHoverBrush" Color="#FF2D2D30" /> 
      <SolidColorBrush x:Key="MyButtonPressedBrush" Color="#FF03A9DD" /> 

      <Style x:Key="MyCloseButtonStyle" TargetType="Button"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="Button"> 
          <Grid> 
           <VisualStateManager.VisualStateGroups> 
            <VisualStateGroup x:Name="CommonStates"> 
             <VisualState x:Name="Normal"/> 
             <VisualState x:Name="MouseOver"> 
              <Storyboard> 
               <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="Background" Storyboard.TargetProperty="(Border.Background)"> 
                <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{StaticResource MyButtonHoverBrush}"></DiscreteObjectKeyFrame> 
               </ObjectAnimationUsingKeyFrames> 
              </Storyboard> 
             </VisualState> 
             <VisualState x:Name="Pressed"> 
              <Storyboard> 
               <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="Background" Storyboard.TargetProperty="(Border.Background)"> 
                <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{StaticResource MyButtonPressedBrush}"></DiscreteObjectKeyFrame> 
               </ObjectAnimationUsingKeyFrames> 
              </Storyboard> 
             </VisualState> 
            </VisualStateGroup> 
           </VisualStateManager.VisualStateGroups> 
           <Border x:Name="Background" CornerRadius="0,0,0,0" Background="Green"> 
            <Border Margin="1,0,1,1" BorderBrush="#59FFFFFF" BorderThickness="1" CornerRadius="0,0,1,0"/> 
           </Border> 
           <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/> 
           <Path x:Name="path" Fill="White" Margin="0,0,0,1" Visibility="Collapsed" 
        Height="60" 
     Width="7" 
     Stretch="Fill" 
     Opacity="1" 
     Data="M 2,6 C2,6 3,6 3,6 3,6 3,5 3,5 3,5 4,5 4,5 4,5 4,6 4,6 4,6 5,6 5,6 5,6 7,6 7,6 7,6 7,5 7,5 7,5 6,5 6,5 6,5 6,4 6,4 6,4 5,4 5,4 5,4 5,2 5,2 5,2 6,2 6,2 6,2 6,1 6,1 6,1 7,1 7,1 7,1 7,0 7,0 7,0 5,0 5,0 5,0 4,0 4,0 4,0 4,1 4,1 4,1 3,1 3,1 3,1 3,0 3,0 3,0 2,0 2,0 2,0 0,0 0,0 0,0 0,1 0,1 0,1 1,1 1,1 1,1 1,2 1,2 1,2 2,2 2,2 2,2 2,4 2,4 2,4 1,4 1,4 1,4 1,5 1,5 1,5 0,5 0,5 0,5 0,6 0,6 0,6 2,6 2,6 z"/> 
          </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 

      <Style TargetType="{x:Type toolkit:MessageBox}"> 
       <Setter Property="Background" Value="#FF1E1E1E" /> 
       <Setter Property="BorderBrush" Value="#FF999999" /> 
       <Setter Property="CaptionForeground" Value="#FFF1F1F1" /> 
       <Setter Property="WindowBorderBrush" Value="#FF686868" /> 
       <Setter Property="WindowBackground" Value="#FF2D2D30" /> 
       <Setter Property="WindowOpacity" Value="0.3" /> 
       <Setter Property="Foreground" Value="#FFF1F1F1"/> 
       <Setter Property="CloseButtonStyle" Value="{StaticResource MyCloseButtonStyle}"/> 
      </Style> 



     </ResourceDictionary> 

    </Application.Resources> 
</Application> 

這是我如何使用它在後面的代碼:

var res = Xceed.Wpf.Toolkit.MessageBox.Show( 
          "R U sure?", 
          "Confirm dialog", 
          MessageBoxButton.YesNoCancel, 
          MessageBoxImage.None, 
          MessageBoxResult.Cancel, 
          null 
         ); 
if ("Cancel" == res.ToString()) {...} 
else if ("No" == res.ToString()) {...} 
else if ("Yes" == res.ToString()) {...} 
else {...} 

而現在我所得到的是: enter image description here

由於沒有辦法碰那些按鈕的XAML,我應該怎麼改變按鈕的風格?至少我想刪除標題的發光效果。

感謝。

UPDATE

我相信發光的效果不被應用到標籤的一些樣式引起的,它是標籤下方的風格矩形,我發現這WPF檢查:

enter image description here

當我把那個矩形的高度設置爲0之後,那個發光的東西就消失了。

回答

3

你可以改變的按鈕樣式是這樣的:

enter image description here

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     Xceed.Wpf.Toolkit.MessageBox mbox = new Xceed.Wpf.Toolkit.MessageBox(); 
     mbox.OkButtonStyle = (Style)Resources["ButtonStyle1"]; 
     mbox.OkButtonContent = "Click Me !"; 
     mbox.Caption = "My custom caption"; 
     mbox.Text = "My custom message"; 
     mbox.ShowDialog(); 
    } 

XAML:

<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"> 
     <Setter Property="Background" Value="Green"></Setter> 
     <Setter Property="Foreground" Value="White"></Setter> 
    </Style> 

至於在您的標題的發光效果,你必須修改樣式你從相應發佈的鏈接中複製,或創建自己的樣式。

編輯:使用MetroDark風格:

enter image description here

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     var res = Xceed.Wpf.Toolkit.MessageBox.Show(
          "R U sure?", 
          "Confirm dialog", 
          MessageBoxButton.YesNoCancel, 
          MessageBoxImage.None, 
          MessageBoxResult.Cancel, 
          (Style)Resources["MessageBoxStyle1"] 
         ); 

     if ("Cancel" == res.ToString()) 
     { 
     } 
     else if ("No" == res.ToString()) 
     { 
     } 
     else if ("Yes" == res.ToString()) 
     { 
     } 
     else 
     { 
     } 
    } 

XAML:

 <Style x:Key="ButtonStyle1" TargetType="Button"> 
      <Setter Property="Background" Value="LightGreen"></Setter> 
      <Setter Property="Foreground" Value="DarkGreen"></Setter> 
     </Style> 
     <Style x:Key="ButtonStyle2" TargetType="Button"> 
      <Setter Property="Background" Value="LightCoral"></Setter> 
      <Setter Property="Foreground" Value="DarkRed"></Setter> 
     </Style> 
     <Style x:Key="ButtonStyle3" TargetType="Button"> 
      <Setter Property="Background" Value="LightYellow"></Setter> 
      <Setter Property="Foreground" Value="DarkOrange"></Setter> 
     </Style> 

     <Style x:Key="MessageBoxStyle1" TargetType="{x:Type xctk:MessageBox}"> 
      <Setter Property="Background" Value="#FF1E1E1E" /> 
      <Setter Property="BorderBrush" Value="#FF999999" /> 
      <Setter Property="CaptionForeground" Value="#FFF1F1F1" /> 
      <Setter Property="WindowBorderBrush" Value="#FF686868" /> 
      <Setter Property="WindowBackground" Value="#FF2D2D30" /> 
      <Setter Property="WindowOpacity" Value="0.3" /> 
      <Setter Property="Foreground" Value="#FFF1F1F1"/> 
      <Setter Property="CloseButtonStyle" Value="{StaticResource MyCloseButtonStyle}"/> 
      <Setter Property="YesButtonStyle" Value="{StaticResource ButtonStyle1}"></Setter> 
      <Setter Property="NoButtonStyle" Value="{StaticResource ButtonStyle2}"></Setter> 
      <Setter Property="CancelButtonStyle" Value="{StaticResource ButtonStyle3}"></Setter> 
     </Style> 

編輯2:字幕煥發鏈接到CaptionShadowBrush

 <Setter Property="CaptionShadowBrush" Value="LightCoral"></Setter> 

enter image description here

您可以將其設置爲Transparent,或得到完全擺脫它:

 <Setter Property="CaptionShadowBrush" Value="Transparent"></Setter> 
+0

謝謝jstreet,我更新的問題,你可以看到,在一塊代碼風格,我沒有看到與發光效果有關的任何東西,大部分代碼都是關於Button風格的。 – VincentZHANG

+0

在另一方面,我使用的MessageBox讓用戶決定: 「RU確保」'VAR解析度= Xceed.Wpf.Toolkit.MessageBox.Show( , 「確認對話框」, MessageBoxButton.YesNoCancel, MessageBoxImage .None, MessageBoxResult.Cancel, null );如果(「取消」== res.ToString()){...} else if(「No」== res.ToString()){...} else if(「Yes」== res。 ToString()){...} else {...}' – VincentZHANG

+0

@VincentZHANG請將樣式作爲文本發佈,而不是作爲打印屏幕,以便人們可以複製它。此外,請將代碼從您的評論移至您的帖子,然後明確您需要的內容。 – jsanalytics