首页 新闻 会员 周边 捐助

Wpf 三角形音量调节

0
悬赏园豆:30 [已关闭问题] 关闭于 2015-07-16 14:11

我想做一个视频播放控件的音量调节控件。

说一下思路也可以 最好是源码

c#牛刀小试的主页 c#牛刀小试 | 初学一级 | 园豆:44
提问于:2015-06-29 11:20
< >
分享
所有回答(1)
0

这里说下思路吧,三角形那个区域你可以使用progressbar来做,通过重写它的template来实现

例如下面的代码,这段代码是在usercontrol中的,也是我以前的一个pro里面的代码,至于如果控制那三角形音量改变这里就不贴出后台的实现代码了,UI基本就是这样了

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="2*" />
            <RowDefinition Height="2*" />
        </Grid.RowDefinitions>
        <Grid Name="VolumnGraphGrid" Background="#FFFFFFFF" Height="20" Margin="2,5,5,2">
            <Grid.Visibility>
                <Binding ElementName="ThisControl" Path="IsVisualizedSamplerVisible" />
            </Grid.Visibility>
            <Grid.Clip>
                <PathGeometry x:Name="LineG">
                    <PathGeometry.Figures>
                        <PathFigure x:Name="PathFig">
                            <PathFigure.Segments>
                                <PolyLineSegment x:Name="PolyLineSeg" />
                            </PathFigure.Segments>
                        </PathFigure>
                    </PathGeometry.Figures>
                </PathGeometry>
            </Grid.Clip>
            <ProgressBar Value="{Binding ElementName=ThisControl, Path=LastPeak}">
                <ProgressBar.Style>
                    <Style TargetType="{x:Type ProgressBar}">
                        <Setter Property="Control.Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type ProgressBar}">
                                    <Grid>
                                        <Border Name="PART_Track">
                                            <Border.Background>
                                                <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                                    <GradientStop Offset="0" Color="#FF00FF00" />
                                                    <GradientStop Offset="0.6" Color="#FFFFFF00" />
                                                    <GradientStop Offset="1" Color="#FFFF0000" />
                                                </LinearGradientBrush>
                                            </Border.Background>
                                        </Border>
                                        <DockPanel>
                                            <Rectangle Name="PART_Indicator" DockPanel.Dock="Left" />
                                            <Rectangle Name="Mask" Fill="#FFC0C0C0" />
                                        </DockPanel>
                                        <Border BorderThickness="1" BorderBrush="#FF888888" />
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ProgressBar.Style>
            </ProgressBar>
        </Grid>
        <Slider Name="VolumeSlider" Grid.Row="1" Interval="1" Maximum="100"
                Margin="0,5,0,0">
        </Slider>
    </Grid>
visonme | 园豆:1674 (小虾三级) | 2015-06-30 10:10

思路是明白了 用path去做三角形 然后里面嵌入slider 但是 怎么让slider藏在path里面 和slider值改变  改变path的填充颜色呢

支持(0) 反对(0) c#牛刀小试 | 园豆:44 (初学一级) | 2015-06-30 11:32

@c#牛刀小试: 

你可以直接忽略上面的slider,这个slider是我其他功能需要的,并不属于你的问题范畴,你只要看上面部分就可以了,至于你说的应该是怎么调整音量大小吧,其实后台处理下progrssbar事件就可以了

支持(0) 反对(0) visonme | 园豆:1674 (小虾三级) | 2015-07-01 09:01

@visonme: 根据你的代码  设置Path 怎么什么也不显示啊

支持(0) 反对(0) c#牛刀小试 | 园豆:44 (初学一级) | 2015-07-01 10:53

@visonme: 

<Grid Name="VolumnGraphGrid" Background="Red" Height="20" Margin="2,5,5,2">
<Grid.Clip>
<PathGeometry x:Name="LineG">
<PathGeometry.Figures>
<PathFigure IsClosed="True" StartPoint="10,100">
<LineSegment Point="100,100"/>
<LineSegment Point="100,50"/>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Grid.Clip>
<ProgressBar Background="Green">
<ProgressBar.Style>
<Style TargetType="{x:Type ProgressBar}">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ProgressBar}">
<Grid>
<Border Name="PART_Track">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Offset="0" Color="Indigo" />
<GradientStop Offset="0.6" Color="DarkCyan" />
<GradientStop Offset="1" Color="Azure" />
</LinearGradientBrush>
</Border.Background>
</Border>
<DockPanel>
<Rectangle Name="PART_Indicator" DockPanel.Dock="Left" />
<Rectangle Name="Mask" Fill="#FFC0C0C0" />
</DockPanel>
<Border BorderThickness="1" BorderBrush="#FF888888" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ProgressBar.Style>
</ProgressBar>
</Grid>

支持(0) 反对(0) c#牛刀小试 | 园豆:44 (初学一级) | 2015-07-01 10:54

@c#牛刀小试: 

 

不会显示应该不可能的,你可以多检查下代码看看,我给你的只是xaml的代码,只是参考使用,还有后台处理代码的 

支持(0) 反对(0) visonme | 园豆:1674 (小虾三级) | 2015-07-01 16:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册