使用固定比率,它看起来像:
<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>
请注意,我将路径更改为在画布上居中。
要使比率动态化,您需要一个能够将其绑定到属性的转换器(此处名为 Percent 的 double)
<Window.Resources>
<local:GridLengthPercentConverter x:Key="GridLengthPercentConverter" />
</Window.Resources>
...
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding
Path=Percent,
Converter={StaticResource GridLengthPercentConverter},
ConverterParameter=first"/>
<ColumnDefinition Width="0"/>
<ColumnDefinition Width="{Binding
Path=Percent,
Converter={StaticResource GridLengthPercentConverter},
ConverterParameter=other"/>
</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;
}
}