所以情况如下:我有一个标签(如果重要的话,可以自定义控件(,我需要用MVVM获得它的宽度和高度。然而,如果我将其中一个参数设置为{Binding XXX},它们就不再是Auto,因此当我在运行时更改字体时,它们的大小不会更新。
我读过关于使用ActualWidth/Height的文章,这听起来正是我所需要的,除了它不是一个依赖参数之外,因此看起来我需要为它打破MVVM。
有什么更好的解决方案吗?
编辑
XAML中的元素看起来没什么特别的。只有一百万个绑定。
<local:DraggableLabel
Content="123"
Margin="{Binding Label2Position, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
HorizontalAlignment="Left"
VerticalAlignment="Top"
FontFamily="{Binding Label2Font.Family}"
FontSize="{Binding Label2Font.Size}"
FontWeight="{Binding Label2Font.Weight}"
FontStyle="{Binding Label2Font.Style}"
Foreground="{Binding Path=Label2Color,
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource ColorToBrushConverter}
}"/>
默认为
Width="Auto"
它不必写得很清楚,但可以(什么都不改变(。它可以在字体更改时调整大小。如果我将其设置为
Width="Binding {Label1Width}"
装订效果很好,但我再也无法自动调整了。
好的,所以我找到了一个解决方法。
由于我创建了一个自定义控件,我能够创建一个名为RealWidth的新DependencyProperty
,然后我添加了一个OnSizeChanged事件,该事件使用ActualWidth值更新它,每次元素大小更改时,您都可以从元素内部获得该值。