这很奇怪。代码正在工作,但突然边框的宽度不再更新。我撤消了所有操作,但仍然无法正常工作。
我把它缩小到这个:
<Canvas>
    <Thumb DragStarted="shiftStartDragStart" DragDelta="breakStartDragDelta" DragCompleted="shiftStartDragEnd"
        Margin="{Binding StartSeconds, Converter={StaticResource StartSecondsToMargin}}">
        <Thumb.Template>
            <ControlTemplate>
                <Border Background="#AC22" CornerRadius="3,0,0,3" 
                    Height="17" Margin="0,10,0,0" MinWidth="5">
                    <Border.Width>
                        <MultiBinding Converter="{StaticResource DurationToWidth}">
                            <Binding Path="StartSeconds"/>
                            <Binding Path="EndSeconds"/>
                        </MultiBinding>
                    </Border.Width>
                </Border>
            </ControlTemplate>
        </Thumb.Template>
    </Thumb>
</Canvas>
如您所见,它是一个带有边框的拇指,当用户拖动它时,事件会发生变化EndSeconds,因此Border.Width也会发生变化。
public class DurationToWidth : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return ((int)values[1] - (int)values[0]) / 120;
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
我可以看到它DurationToWidth 返回了正确的值。但我不知道为什么WidthBorder 显示为它的MinWidth.
我上传了一张关于它现在的行为方式和之前的行为方式的图片:
