吉吉于

WPF 豆瓣电台 (Skin)

用WPF做一个豆瓣电台,提取歌曲的方法我找到了,晒一下新写的皮肤。

Window.xaml

<Window x:Class="WPF_title.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="夜阑听音" Height="200" Width="400" WindowStyle="None" AllowsTransparency="True"  MouseDown="Window_MouseDown" Background="#FF030303" Opacity="1">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200"/>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Rectangle Grid.Column="0">
            <Rectangle.Fill>
                <ImageBrush ImageSource="Resources/Img/maximilian.jpg"/>
            </Rectangle.Fill>
        </Rectangle>
        <StackPanel x:Name="Top" Grid.Column="1">
            <Grid x:Name="Control"  Height="20">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBlock Name="Genre" Text="Indie" Grid.Column="0"/>
                <StackPanel Grid.Column="1" Orientation="Horizontal"  HorizontalAlignment="Right">
                    <Button x:Name="Minizise" Width="15" Style="{DynamicResource MinimizeStyle}" Click="Min"/>
                    <Button x:Name="DockToBottom" Width="15" Style="{DynamicResource ToNotifyIconStyle}" Click="Dock"/>
                    <Button x:Name="Close"  Width="15" Style="{DynamicResource ExitStyle}" Click="Exit"/>
                </StackPanel>
            </Grid>
            <Grid x:Name="SongMeta">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="153*" />
                    <ColumnDefinition Width="25*" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
            </Grid>
            <TextBlock Name="Title" Text="The days are long and filled with pain" Grid.Row="1" FontSize="15"/>
            <TextBlock Name="Album" Text="I Am Falling Now" Grid.Row="2"/>
            <TextBlock Name="Singer" Text="Maximilian Hecker"  Grid.Row="3"/>
        </StackPanel>
        <!--<Grid x:Name="Time" Grid.Column="1" VerticalAlignment="Bottom" Margin="0 0 0 60">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock x:Name="CurrentTime" FontSize="11" Foreground="White" Text="00:00" Grid.Column="0"/>
            <TextBlock x:Name="TotalTime" FontSize="11" HorizontalAlignment="Right" Foreground="White" Text="00:00" Grid.Column="1" />
        </Grid>
        <Grid Margin="0 0 0 40" VerticalAlignment="Bottom" Grid.Column="1">
            <Slider x:Name="slidebar"  Width="200" Style="{DynamicResource SliderStyleForProgress}" />
        </Grid>-->
        <Grid x:Name="Bottom" Margin="0 130 0 0" Grid.Column="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <CheckBox Grid.Column="0" x:Name="CheckBoxLike" Style="{DynamicResource LikeStyle}" Margin="13" />
            <Button Grid.Column="1" x:Name="ButtonNever" Style="{DynamicResource NeverStyle}" Margin="13"/>
            <CheckBox Grid.Column="2" x:Name="CheckBoxPause" Style="{DynamicResource PauseStyle}" Margin="13"/>
            <Button Grid.Column="3" x:Name="ButtonNext" Style="{DynamicResource NextStyle}" Margin="13"/>
        </Grid>
    </Grid>
</Window>

Style.xaml

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="TextBlock">
        <Style.Setters>
            <Setter Property="Foreground" Value="#fff"/>
            <Setter Property="TextWrapping" Value="Wrap"/>
            <Setter Property="Margin" Value="5 5 5 0"/>
        </Style.Setters>
    </Style>
    <Style x:Key="Top" TargetType="{x:Type StackPanel}">
        <Setter Property="MaxHeight" Value="110"/>

    </Style>
    <Style x:Key="CustomButtonBaseStyle" TargetType="{x:Type ButtonBase}">
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="#ff4040"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Foreground" Value="#bb3355"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Foreground" Value="#fff"/>
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style x:Key="CustomButtonStyle" BasedOn="{StaticResource CustomButtonBaseStyle}" TargetType="{x:Type Button}">
    </Style>
    <Style x:Key="CustomCheckBoxStyle" BasedOn="{StaticResource CustomButtonBaseStyle}" TargetType="{x:Type CheckBox}">
    </Style>
    <Style x:Key="MinimizeStyle" BasedOn="{StaticResource CustomButtonStyle}" TargetType="{x:Type Button}">
        <Setter Property="ToolTip" Value="最小化"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Viewbox>
                        <Canvas Width="256" Height="256" Clip="F1 M 0,0L 256,0L 256,256L 0,256L 0,0" Background="{TemplateBinding Background}">
                            <Rectangle Width="192" Height="32" Canvas.Left="32" Canvas.Top="192" Stretch="Fill" Fill="{TemplateBinding Foreground}"/>
                        </Canvas>
                    </Viewbox>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="ToNotifyIconStyle" BasedOn="{StaticResource CustomButtonStyle}" TargetType="{x:Type Button}">
        <Setter Property="ToolTip" Value="最小化到托盘"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Viewbox>
                        <Canvas Width="256" Height="256" Clip="F1 M 0,0L 256,0L 256,256L 0,256L 0,0" Background="{TemplateBinding Background}">
                            <Path Width="224" Height="224" Canvas.Left="16" Canvas.Top="16" Stretch="Fill" StrokeThickness="32" StrokeLineJoin="Round" Stroke="{TemplateBinding Foreground}" Data="M 32,32L 224,224"/>
                            <Path Width="127.5" Height="128.25" Canvas.Left="112.5" Canvas.Top="112" Stretch="Fill" StrokeThickness="32" StrokeLineJoin="Round" Stroke="{TemplateBinding Foreground}" Data="M 128.5,224.25L 224,224L 224,128"/>
                        </Canvas>
                    </Viewbox>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="ExitStyle" BasedOn="{StaticResource CustomButtonStyle}" TargetType="{x:Type Button}">
        <Setter Property="ToolTip" Value="退出"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Viewbox>
                        <Canvas Width="256" Height="256" Clip="F1 M 0,0L 256,0L 256,256L 0,256L 0,0" Background="{TemplateBinding Background}">
                            <Path Width="214.627" Height="214.627" Canvas.Left="20.6863" Canvas.Top="20.6863" Stretch="Fill" Fill="{TemplateBinding Foreground}" Data="M 20.6863,212.686L 105.373,128L 20.6863,43.3137L 43.3137,20.6863L 128,105.373L 212.686,20.6863L 235.314,43.3137L 150.627,128L 235.314,212.686L 212.686,235.314L 128,150.627L 43.3137,235.314L 20.6863,212.686 Z "/>
                        </Canvas>
                    </Viewbox>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <!--<Style x:Key="SliderStyleForProgress" TargetType="{x:Type Slider}">
        <Setter Property="Height" Value="5"/>
        <Setter Property="Background" Value="Dodgerblue"/>
        <Setter Property="Foreground" Value="Yellow"/>
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Slider}">
                    <Grid>
                        <Rectangle x:Name="Track" Fill="{TemplateBinding Background}"/>
                        <Rectangle x:Name="Thumb" Fill="{TemplateBinding Foreground}">
                            <Rectangle.RenderTransform>
                                <ScaleTransform>
                                    <ScaleTransform.ScaleX>
                                        <MultiBinding Converter="{StaticResource converter1}">
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Value"/>
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Minimum"/>
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Maximum"/>
                                        </MultiBinding>
                                    </ScaleTransform.ScaleX>
                                </ScaleTransform>
                            </Rectangle.RenderTransform>
                        </Rectangle>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>-->
    <Style x:Key="LikeStyle" BasedOn="{StaticResource CustomCheckBoxStyle}" TargetType="{x:Type CheckBox}">
        <Setter Property="BorderBrush" Value="White"/>
        <Setter Property="ToolTip" Value="喜欢"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type CheckBox}">
                    <Viewbox>
                        <Canvas Width="256" Height="220" Clip="F1 M 0,0L 256,0L 256,220L 0,220L 0,0" Background="{TemplateBinding Background}">
                            <Path x:Name="path" Width="256" Height="216.961" Canvas.Left="1.67144e-005" Canvas.Top="5.03886" Stretch="Fill" Fill="{TemplateBinding Foreground}" Data="F1 M 128,220C 154.667,200.333 186,172 202,156C 218,140 256,94 256,69C 256,-1.99995 194.288,0.999451 176,5C 144,12 135.016,36.0526 128,44C 120.984,36.0526 112,13 80,6C 61.7118,1.99945 2.61674e-005,-0.999954 5.82235e-006,70C 2.61674e-005,95 38,140 54,156C 70,172 101.333,200.333 128,220" Stroke="{TemplateBinding BorderBrush}" StrokeStartLineCap="Round" StrokeThickness="0"/>
                        </Canvas>
                    </Viewbox>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="StrokeThickness" TargetName="path" Value="10"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="NeverStyle" BasedOn="{StaticResource CustomButtonStyle}" TargetType="{x:Type Button}">
        <Setter Property="ToolTip" Value="不再播放"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Viewbox>
                        <Canvas Width="256" Height="256" Clip="F1 M 0,0L 256,0L 256,256L 0,256L 0,0" Background="{TemplateBinding Background}">
                            <Path Width="185" Height="256" Canvas.Left="35.5" Canvas.Top="4.57764e-005" Stretch="Fill" Fill="{TemplateBinding Foreground}" Data="M 198.667,84L 198.667,236C 198.667,247.046 189.712,256 178.667,256L 77.3332,256C 66.2875,256 57.3332,247.046 57.3332,236L 57.3332,84C 57.3332,82.6301 57.471,81.2925 57.7333,80L 198.267,80C 198.529,81.2925 198.667,82.6301 198.667,84 Z M 91.2256,108.496L 91.2256,227.504L 108.774,227.504L 108.774,108.496L 91.2256,108.496 Z M 147.226,108.496L 147.226,227.504L 164.774,227.504L 164.774,108.496L 147.226,108.496 Z M 85,4.57764e-005L 171,4.57764e-005C 173.761,4.57764e-005 176,2.2386 176,5.00005L 176,32L 220.5,32L 220.5,64L 35.5,64L 35.5,32L 80,32L 80,5.00005C 80,2.2386 82.2386,4.57764e-005 85,4.57764e-005 Z M 101,16.0001C 98.2385,16.0001 95.9999,18.2387 95.9999,21.0001L 95.9999,32L 160,32L 160,21.0001C 160,18.2387 157.761,16.0001 155,16.0001L 101,16.0001 Z "/>
                        </Canvas>
                    </Viewbox>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="PauseStyle" BasedOn="{StaticResource CustomCheckBoxStyle}" TargetType="{x:Type CheckBox}">
        <Setter Property="ToolTip" Value="暂停"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type CheckBox}">
                    <Viewbox>
                        <Canvas Width="30" Height="30" Background="{TemplateBinding Background}">
                            <Rectangle x:Name="Rectangle" Width="10" Height="30" Canvas.Left="20" Canvas.Top="0" Stretch="Fill" Fill="{TemplateBinding Foreground}"/>
                            <Rectangle x:Name="Rectangle_0" Width="10" Height="30" Canvas.Left="0" Canvas.Top="0" Stretch="Fill" Fill="{TemplateBinding Foreground}"/>
                        </Canvas>
                    </Viewbox>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsChecked" Value="True">
                <Setter Property="ToolTip" Value="播放"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type CheckBox}">
                            <Viewbox>
                                <Canvas Width="26" Height="30" Background="{TemplateBinding Background}">
                                    <Path x:Name="Path" Width="25.981" Height="30.0003" Canvas.Left="2.87779e-007" Canvas.Top="-6.35788e-007" Stretch="Fill" Fill="{TemplateBinding Foreground}" Data="F1 M 25.981,15.0001L 2.87779e-007,-6.35788e-007L 2.87779e-007,30.0003L 25.981,15.0001 Z "/>
                                </Canvas>
                            </Viewbox>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style x:Key="NextStyle" BasedOn="{StaticResource CustomButtonStyle}" TargetType="{x:Type Button}">
        <Setter Property="ToolTip" Value="下一首"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Viewbox>
                        <Canvas x:Name="Document" Width="30" Height="20" Clip="F1 M 0,0L 30,0L 30,20L 0,20L 0,0" Background="Transparent">
                            <Canvas Width="30" Height="30" Canvas.Left="0" Canvas.Top="0">
                                <Path x:Name="Path" Width="30" Height="20" Canvas.Left="-1.98682e-008" Canvas.Top="-9.53674e-007" Stretch="Fill" Data="M 30,-9.53674e-007L 26,-9.53674e-007L 26,8L 13,-9.53674e-007L 13,8L -1.98682e-008,-9.53674e-007L -1.98682e-008,20L 13,12L 13,20L 26,12L 26,20L 30,20L 30,-9.53674e-007 Z " Fill="{TemplateBinding Foreground}"/>
                            </Canvas>
                        </Canvas>
                    </Viewbox>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

 

 

 

 

转载请注明:于哲的博客 » WPF 豆瓣电台 (Skin)