• 新手用WPF山寨QQ管家7.6(二)



    新手用WPF山寨QQ管家7.6(一)

    http://www.cnblogs.com/channingzhao/archive/2013/04/10/3012587.html


    接着上次的来

    2.导航最大最小关闭按钮的制作:

     

    效果展示

    写一个Border,BorderThickness="1,0,0,0",只有左边有线条,Border内放关闭按钮图片,接着设计好背景渐进颜色并透明,构成按钮控件,在故事版里做MouseOver和Pressed效果,这里需要做成时间渐变。

    关闭按钮样式代码
     1 <Style x:Key="CloseButtonStyle" TargetType="{x:Type Button}">
     2         <Setter Property="Template">
     3             <Setter.Value>
     4                 <ControlTemplate TargetType="{x:Type Button}">
     5                     <ControlTemplate.Resources>
     6                         <Storyboard x:Key="MouseOver">
     7                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="grid">
     8                                 <EasingColorKeyFrame KeyTime="0:0:0.3" Value="#33F18C85"/>
     9                             </ColorAnimationUsingKeyFrames>
    10                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="grid">
    11                                 <EasingColorKeyFrame KeyTime="0:0:0.3" Value="#99E4241E"/>
    12                             </ColorAnimationUsingKeyFrames>
    13                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)" Storyboard.TargetName="grid">
    14                                 <EasingColorKeyFrame KeyTime="0:0:0.3" Value="#7FF75C57"/>
    15                             </ColorAnimationUsingKeyFrames>
    16                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Offset)" Storyboard.TargetName="grid">
    17                                 <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.687"/>
    18                             </DoubleAnimationUsingKeyFrames>
    19                         </Storyboard>
    20                         <Storyboard x:Key="Pressed">
    21                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="grid">
    22                                 <EasingColorKeyFrame KeyTime="0" Value="#33EF7C74"/>
    23                             </ColorAnimationUsingKeyFrames>
    24                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="grid">
    25                                 <EasingColorKeyFrame KeyTime="0" Value="#B2C21813"/>
    26                             </ColorAnimationUsingKeyFrames>
    27                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)" Storyboard.TargetName="grid">
    28                                 <EasingColorKeyFrame KeyTime="0" Value="#7FE7312B"/>
    29                             </ColorAnimationUsingKeyFrames>
    30                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Offset)" Storyboard.TargetName="grid">
    31                                 <EasingDoubleKeyFrame KeyTime="0" Value="0.578"/>
    32                             </DoubleAnimationUsingKeyFrames>
    33                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="image">
    34                                 <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
    35                             </DoubleAnimationUsingKeyFrames>
    36                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="image">
    37                                 <EasingDoubleKeyFrame KeyTime="0" Value="0.5"/>
    38                             </DoubleAnimationUsingKeyFrames>
    39                         </Storyboard>
    40                     </ControlTemplate.Resources>
    41                     <Grid x:Name="grid">
    42                         <Grid.Background>
    43                             <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    44                                 <GradientStop Color="#00FF332D" Offset="0"/>
    45                                 <GradientStop Color="#00FF332D" Offset="1"/>
    46                                 <GradientStop Color="#00F75C57" Offset="0.474"/>
    47                             </LinearGradientBrush>
    48                         </Grid.Background>
    49                         <Border BorderThickness="1,0,0,0">
    50                             <Border.BorderBrush>
    51                                 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    52                                     <GradientStop Color="#FF666666" Offset="0"/>
    53                                     <GradientStop Color="#FF959595" Offset="1"/>
    54                                 </LinearGradientBrush>
    55                             </Border.BorderBrush>
    56                             <Image x:Name="image" Source="../Resource/Image/Close.png" Height="9" Width="9" RenderTransformOrigin="0.5,0.5">
    57                                 <Image.RenderTransform>
    58                                     <TransformGroup>
    59                                         <ScaleTransform/>
    60                                         <SkewTransform/>
    61                                         <RotateTransform/>
    62                                         <TranslateTransform/>
    63                                     </TransformGroup>
    64                                 </Image.RenderTransform>
    65                             </Image>
    66                         </Border>
    67                         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    68                     </Grid>
    69                     <ControlTemplate.Triggers>
    70                         <Trigger Property="IsMouseOver" Value="True">
    71                             <Trigger.ExitActions>
    72                                 <RemoveStoryboard BeginStoryboardName="MouseOver_BeginStoryboard"/>
    73                             </Trigger.ExitActions>
    74                             <Trigger.EnterActions>
    75                                 <BeginStoryboard x:Name="MouseOver_BeginStoryboard" Storyboard="{StaticResource MouseOver}"/>
    76                             </Trigger.EnterActions>
    77                         </Trigger>
    78                         <Trigger Property="IsPressed" Value="True">
    79                             <Trigger.ExitActions>
    80                                 <RemoveStoryboard BeginStoryboardName="Pressed_BeginStoryboard"/>
    81                             </Trigger.ExitActions>
    82                             <Trigger.EnterActions>
    83                                 <BeginStoryboard x:Name="Pressed_BeginStoryboard" Storyboard="{StaticResource Pressed}"/>
    84                             </Trigger.EnterActions>
    85                         </Trigger>
    86                     </ControlTemplate.Triggers>
    87                 </ControlTemplate>
    88             </Setter.Value>
    89         </Setter>
    90     </Style>

    最大化按钮MouseOver是红色的,而且比其他按钮宽一些。

    最大化按钮样式代码
     1 <Style x:Key="MaxButtonStyle" TargetType="{x:Type Button}">
     2         <Setter Property="Template">
     3             <Setter.Value>
     4                 <ControlTemplate TargetType="{x:Type Button}">
     5                     <ControlTemplate.Resources>
     6                         <Storyboard x:Key="MouseOver">
     7                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="grid">
     8                                 <EasingColorKeyFrame KeyTime="0:0:0.3" Value="#19FFFFFF"/>
     9                             </ColorAnimationUsingKeyFrames>
    10                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="grid">
    11                                 <EasingColorKeyFrame KeyTime="0:0:0.3" Value="#4CF3F3F3"/>
    12                             </ColorAnimationUsingKeyFrames>
    13                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)" Storyboard.TargetName="grid">
    14                                 <EasingColorKeyFrame KeyTime="0:0:0.3" Value="#33FFFFFF"/>
    15                             </ColorAnimationUsingKeyFrames>
    16                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Offset)" Storyboard.TargetName="grid">
    17                                 <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.176"/>
    18                             </DoubleAnimationUsingKeyFrames>
    19                         </Storyboard>
    20                         <Storyboard x:Key="Pressed">
    21                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="grid">
    22                                 <EasingColorKeyFrame KeyTime="0" Value="#33D8D8D8"/>
    23                             </ColorAnimationUsingKeyFrames>
    24                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="grid">
    25                                 <EasingColorKeyFrame KeyTime="0" Value="#B2898989"/>
    26                             </ColorAnimationUsingKeyFrames>
    27                             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Color)" Storyboard.TargetName="grid">
    28                                 <EasingColorKeyFrame KeyTime="0" Value="#7FB8B8B8"/>
    29                             </ColorAnimationUsingKeyFrames>
    30                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[2].(GradientStop.Offset)" Storyboard.TargetName="grid">
    31                                 <EasingDoubleKeyFrame KeyTime="0" Value="0.48"/>
    32                             </DoubleAnimationUsingKeyFrames>
    33                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="image">
    34                                 <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
    35                             </DoubleAnimationUsingKeyFrames>
    36                             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="image">
    37                                 <EasingDoubleKeyFrame KeyTime="0" Value="0.5"/>
    38                             </DoubleAnimationUsingKeyFrames>
    39                         </Storyboard>
    40                     </ControlTemplate.Resources>
    41                     <Grid x:Name="grid">
    42                         <Grid.Background>
    43                             <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    44                                 <GradientStop Color="#00FF332D" Offset="0"/>
    45                                 <GradientStop Color="#00FF332D" Offset="1"/>
    46                                 <GradientStop Color="#00F75C57" Offset="0.474"/>
    47                             </LinearGradientBrush>
    48                         </Grid.Background>
    49                         <Border BorderThickness="1,0,0,0">
    50                             <Border.BorderBrush>
    51                                 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    52                                     <GradientStop Color="#FF666666" Offset="0"/>
    53                                     <GradientStop Color="#FF959595" Offset="1"/>
    54                                 </LinearGradientBrush>
    55                             </Border.BorderBrush>
    56                             <Image x:Name="image" Source="../Resource/Image/Max.png" Height="9" Width="9" RenderTransformOrigin="0.5,0.5">
    57                                 <Image.RenderTransform>
    58                                     <TransformGroup>
    59                                         <ScaleTransform/>
    60                                         <SkewTransform/>
    61                                         <RotateTransform/>
    62                                         <TranslateTransform/>
    63                                     </TransformGroup>
    64                                 </Image.RenderTransform>
    65                             </Image>
    66                         </Border>
    67                         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    68                     </Grid>
    69                     <ControlTemplate.Triggers>
    70                         <Trigger Property="IsMouseOver" Value="True">
    71                             <Trigger.ExitActions>
    72                                 <RemoveStoryboard BeginStoryboardName="MouseOver_BeginStoryboard"/>
    73                             </Trigger.ExitActions>
    74                             <Trigger.EnterActions>
    75                                 <BeginStoryboard x:Name="MouseOver_BeginStoryboard" Storyboard="{StaticResource MouseOver}"/>
    76                             </Trigger.EnterActions>
    77                         </Trigger>
    78                         <Trigger Property="IsPressed" Value="True">
    79                             <Trigger.ExitActions>
    80                                 <RemoveStoryboard BeginStoryboardName="Pressed_BeginStoryboard"/>
    81                             </Trigger.ExitActions>
    82                             <Trigger.EnterActions>
    83                                 <BeginStoryboard x:Name="Pressed_BeginStoryboard" Storyboard="{StaticResource Pressed}"/>
    84                             </Trigger.EnterActions>
    85                         </Trigger>
    86                     </ControlTemplate.Triggers>
    87                 </ControlTemplate>
    88             </Setter.Value>
    89         </Setter>
    90     </Style>

    图标素材.rar   图标是自己从管家上扣的...效果不是立体的,也能用,我实在找不到这种小图标了。

    3.登录管家按钮的制作:

     

    效果展示

    这个按钮用到了图形间的组合,是一个圆角Rectangle和一个Ellipse排斥组合而成。

    先画一个Rectangle,再在上面画一个Ellipse,圈住两个图形,选择对象->合并->排斥,就能做出上面的效果了,空圈放图片,按钮效果同上。

     

    4. 皮肤选择层的制作:

     

    效果展示

    资产->形状里有三角形,用它和圆角巨型组合出底层形状(相并),并构成ScrollViewer控件,在ScrollViewer内添加WrapPanel用于放3*3张图片。

    皮肤选择层代码
     1 <ScrollViewer Margin="0,176,53.5,324" Style="{DynamicResource ScrollViewerStyle1}" HorizontalAlignment="Right" Width="200">
     2             <WrapPanel Margin="4,20,4,0">
     3                 <Image Source="Resource/Image/Background.jpg" Width="60" Stretch="Fill" Height="40" Margin="2"/>
     4                 <Image Source="Resource/Image/Background.jpg" Width="60" Stretch="Fill" Height="40" Margin="2"/>
     5                 <Image Source="Resource/Image/Background.jpg" Width="60" Stretch="Fill" Height="40" Margin="2"/>
     6                 <Image Source="Resource/Image/Background.jpg" Width="60" Stretch="Fill" Height="40" Margin="2"/>
     7                 <Image Source="Resource/Image/Background.jpg" Width="60" Stretch="Fill" Height="40" Margin="2"/>
     8                 <Image Source="Resource/Image/Background.jpg" Width="60" Stretch="Fill" Height="40" Margin="2"/>
     9                 <Image Source="Resource/Image/Background.jpg" Width="60" Stretch="Fill" Height="40" Margin="2"/>
    10                 <Image Source="Resource/Image/Background.jpg" Width="60" Stretch="Fill" Height="40" Margin="2"/>
    11                 <Image Source="Resource/Image/Background.jpg" Width="60" Stretch="Fill" Height="40" Margin="2"/>
    12             </WrapPanel>
    13         </ScrollViewer>
    皮肤选择层样式代码
     1 <Style x:Key="ScrollViewerStyle1" TargetType="{x:Type ScrollViewer}">
     2             <Setter Property="Template">
     3                 <Setter.Value>
     4                     <ControlTemplate TargetType="{x:Type ScrollViewer}">
     5                         <Grid>
     6                             <Path Data="M101,0.5 L112,11.5 194.5,11.5 C197.26142,11.500001 199.5,13.738577 199.5,16.500001 L199.5,155.5 C199.5,158.26143 197.26142,160.5 194.5,160.5 L5.5,160.5 C2.7385788,160.5 0.5,158.26143 0.5,155.5 L0.5,16.500001 C0.5,13.738577 2.7385788,11.500001 5.5,11.5 L89.999999,11.5 z" Fill="White" Stretch="Fill" Stroke="#B27A7A7A" StrokeThickness="0.5">
     7                                 <Path.Effect>
     8                                     <DropShadowEffect Opacity="0.7" ShadowDepth="2" Direction="310"/>
     9                                 </Path.Effect>
    10                             </Path>
    11                             <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    12                         </Grid>
    13                     </ControlTemplate>
    14                 </Setter.Value>
    15             </Setter>
    16         </Style>

    5. 换肤的实现:

    定义ResourceHelper类:

     1    static class ResourceHelper
     2    {
     3         public static void LoadResource(string fileName)
     4         {
     5             Application.Current.Resources.MergedDictionaries[0] = new ResourceDictionary()
     6             {
     7                 Source = new Uri(fileName,UriKind.RelativeOrAbsolute)
     8             };
     9         }
    10    }

    不同的皮肤分别为不同的Style.xaml

    1   <Application.Resources>
    2         <ResourceDictionary>
    3             <ResourceDictionary.MergedDictionaries>
    4                 <ResourceDictionary Source="Theme/Theme8.xaml"/>
    5             </ResourceDictionary.MergedDictionaries>
    6         </ResourceDictionary>
    7   </Application.Resources>

    换肤按钮事件:

    1      private void ThemeImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    2         {
    3             Image image = sender as Image;
    4             if (image != null && image.Source != null)
    5             {
    6                 string imgName = image.Name;
    7                 ResourceHelper.LoadResource("pack://application:,,,/项目名;component/Theme/" + imgName + ".xaml");
    8             }
    9         }

    我的每个Theme.xaml目前只有背景图和导航字色变化:

    Theme.xaml内:
    <
    ImageBrush x:Key="WindowBack" ImageSource="../Resource/Image/b8.jpg" Stretch="UniformToFill"/>
    MainWindow内:
    Background="{DynamicResource WindowBack}"

    换肤的时候DynamicResource会跟着换,StaticResource不会。

    直接修改样式文件内的元素会提示只读,百度了下也只有换肤能做,不知道其他办法~

    我的换肤是临时的,保存不了,重运行就恢复,不知道怎么解决呀~在此请教下高手们...

    下次记录快速通道滑屏效果

  • 相关阅读:
    UIWebView stringByEvaluatingJavaScriptFromString的使用方法
    手动截图
    KVO与KVC的使用(转)
    LKDBHelper Sqlite操作数据库
    GCD多线程的使用
    ios --- 调用系统"设置"里的功能(转)
    ios开发小技巧(转)
    url字符串中含中文的转码方法
    ios 照片编辑的view封装
    字符串去空格
  • 原文地址:https://www.cnblogs.com/channingzhao/p/3013619.html
Copyright © 2020-2023  润新知