这很奇怪。代码正在工作,但突然边框的宽度不再更新。我撤消了所有操作,但仍然无法正常工作。
我把它缩小到这个:
<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
返回了正确的值。但我不知道为什么Width
Border 显示为它的MinWidth
.
我上传了一张关于它现在的行为方式和之前的行为方式的图片: