这非常奇怪。代码正在工作查找但突然边框的宽度不再更新。我撤消了所有内容,但仍然无法让它发挥作用。
我把它缩小到这个:
<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
显示为MinWidth
。
我上传了一张关于它现在如何表现以及之前表现如何的图片:
答案 0 :(得分:0)
我明白了!
我改变了
return ((int)values[1] - (int)values[0]) / 120;
到
return ((int)values[1] - (int)values[0]) / 120d;
它按预期工作。似乎由于某种原因,整数值为宽度“有时”会导致问题。