0

这很奇怪。代码正在工作,但突然边框的宽度不再更新。我撤消了所有操作,但仍然无法正常工作。

我把它缩小到这个:

<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.

我上传了一张关于它现在的行为方式和之前的行为方式的图片:

在此处输入图像描述


任何,有任何想法吗?

4

1 回答 1

0

我得到了它!

我变了

return ((int)values[1] - (int)values[0]) / 120;

return ((int)values[1] - (int)values[0]) / 120d;

它按预期工作。似乎由于某种原因,“有时”作为宽度的整数值会导致问题。

于 2013-11-12T08:11:28.787 回答