边框宽度突然没有更新

时间:2013-11-11 20:34:31

标签: wpf

这非常奇怪。代码正在工作查找但突然边框的宽度不再更新。我撤消了所有内容,但仍然无法让它发挥作用。

我把它缩小到这个:

<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

我上传了一张关于它现在如何表现以及之前表现如何的图片:

enter image description here


任何,任何想法都可以吗?

1 个答案:

答案 0 :(得分:0)

我明白了!

我改变了

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

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

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