Wpf 沿滑块放置三角形

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属性提供。 我的问题是:如何重新定位三角形,使其指向该%值(而不是拇指

我想通过指向固定位置的三角形来延伸滑块(三角形不会像拇指那样移动)

当前代码在位置0,0处绘制三角形

<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)
我假设您知道如何编写抱歉,我首先没有完全理解您的答案。谢谢你的帮助。但我最终做了不同的事情。很抱歉让你感到困惑,请看下面的答案。