如何将WPF中自动设置的参数与MVVM绑定



所以情况如下:我有一个标签(如果重要的话,可以自定义控件(,我需要用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值更新它,每次元素大小更改时,您都可以从元素内部获得该值。

最新更新