Wpf 沿滑块放置三角形
我想通过指向固定位置的三角形来延伸滑块(三角形不会像拇指那样移动) 当前代码在位置0,0处绘制三角形Wpf 沿滑块放置三角形,wpf,path,slider,Wpf,Path,Slider,我想通过指向固定位置的三角形来延伸滑块(三角形不会像拇指那样移动) 当前代码在位置0,0处绘制三角形 <Path Data="M 0 0 L 6 0 L 3 7 Z" Stroke="Black" Fill="Black"/> 结果如下所示: 在本例中,滑块表示%值(范围不一定是0-100)。三角形应定位在固定的%值上,该值通过dependency属性提供。 我的问题是:如何重新定位三角形,使其指向该%值(而不是拇指
<Path Data="M 0 0 L 6 0 L 3 7 Z" Stroke="Black" Fill="Black"/>
结果如下所示:
在本例中,滑块表示%值(范围不一定是0-100)。三角形应定位在固定的%值上,该值通过dependency属性提供。
我的问题是:如何重新定位三角形,使其指向该%值(而不是拇指值)?在固定比率下,它看起来像:
<Grid>
<Grid Margin="0,-10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25*"/>
<ColumnDefinition Width="0"/>
<ColumnDefinition Width="75*"/>
</Grid.ColumnDefinitions>
<Canvas Grid.Column="1">
<Path Data="M -3 0 L 3 0 L 0 7 Z" Stroke="Black" Fill="Black"/>
</Canvas>
</Grid>
<Slider/>
</Grid>
以下是转换器的外观:
public class GridLengthPercentConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if(parameter.ToString() == "first")
return new GridLength((double)value, GridUnitType.Star)
return new GridLength(100 - (double)value, GridUnitType.Star)
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
在固定比率的情况下,它看起来像:
<Grid>
<Grid Margin="0,-10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25*"/>
<ColumnDefinition Width="0"/>
<ColumnDefinition Width="75*"/>
</Grid.ColumnDefinitions>
<Canvas Grid.Column="1">
<Path Data="M -3 0 L 3 0 L 0 7 Z" Stroke="Black" Fill="Black"/>
</Canvas>
</Grid>
<Slider/>
</Grid>
以下是转换器的外观:
public class GridLengthPercentConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if(parameter.ToString() == "first")
return new GridLength((double)value, GridUnitType.Star)
return new GridLength(100 - (double)value, GridUnitType.Star)
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
那很容易。创建一个具有三列宽度的网格:25*、0、75*,将三角形放在画布的第二列中,以便在25%的位置看到它。然后,您可以编写一个转换器,将DP值转换为
GridLength
以查看它在任何位置的情况,但转换结果如何?返回新的GridLength((int)值,GridUnitType.Star)
我假设您知道如何编写抱歉,我首先没有完全理解您的答案。谢谢你的帮助。但我最终做了不同的事情。很抱歉搞混了,请看下面的答案。这很简单。创建一个具有三列宽度的网格:25*、0、75*,将三角形放在画布的第二列中,以便在25%的位置看到它。然后,您可以编写一个转换器,将DP值转换为GridLength
以查看它在任何位置的情况,但转换结果如何?返回新的GridLength((int)值,GridUnitType.Star)
我假设您知道如何编写抱歉,我首先没有完全理解您的答案。谢谢你的帮助。但我最终做了不同的事情。很抱歉让你感到困惑,请看下面的答案。