我想做一个视频播放控件的音量调节控件。
说一下思路也可以 最好是源码
这里说下思路吧,三角形那个区域你可以使用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>
思路是明白了 用path去做三角形 然后里面嵌入slider 但是 怎么让slider藏在path里面 和slider值改变 改变path的填充颜色呢
@c#牛刀小试:
你可以直接忽略上面的slider,这个slider是我其他功能需要的,并不属于你的问题范畴,你只要看上面部分就可以了,至于你说的应该是怎么调整音量大小吧,其实后台处理下progrssbar事件就可以了
@visonme: 根据你的代码 设置Path 怎么什么也不显示啊
@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>
@c#牛刀小试:
不会显示应该不可能的,你可以多检查下代码看看,我给你的只是xaml的代码,只是参考使用,还有后台处理代码的